Improved accuracy on text-to-real and real-to-text conversions. Most

conversions now round-trip correctly.  Still need to fix some corner
cases.

FossilOrigin-Name: 8ecffca900cd6a8922001fd458a266ce8c83fb66
This commit is contained in:
drh
2012-06-19 03:11:25 +00:00
parent 89f15088f0
commit 72b3fbc7b5
6 changed files with 63 additions and 22 deletions
+12 -1
View File
@@ -863,8 +863,19 @@ static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
assert( argc==1 );
UNUSED_PARAMETER(argc);
switch( sqlite3_value_type(argv[0]) ){
case SQLITE_INTEGER:
case SQLITE_FLOAT: {
double r1, r2;
r1 = sqlite3_value_double(argv[0]);
char zBuf[50];
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.15g", r1);
sqlite3AtoF(zBuf, &r2, 20, SQLITE_UTF8);
if( r1!=r2 ){
sqlite3_snprintf(sizeof(zBuf), zBuf, "%!.20e", r1);
}
sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
break;
}
case SQLITE_INTEGER: {
sqlite3_result_value(context, argv[0]);
break;
}