从sqlite调用时如何避免舍入浮点值
How to avoid rounding off the float value when called from sqlite
我正在使用以下语句从 table 获取浮点值:
NSNumber *f = [NSNumber numberWithDouble:(double)sqlite3_column_double(statement, 0)];
数据库中的值为 23.679999999,但我得到的是 23.68。我试过 numberWithFloat 但我得到了相同的结果。
谁能告诉我如何在不四舍五入的情况下获得价值?
当必须准确保留所有数字时,NSNumber
-wrapped-double
不是适合存储十进制值的数据类型。使用 NSDecimalNumber
代替:
unsigned char *c = sqlite3_column_text(statement, 0);
NSNumber *f = nil;
if (c) {
NSString *numStr = [NSString stringWithUTF8String:c];
f = [NSDecimalNumber decimalNumberWithString:numStr];
}
只要您使用本机值,这应该会保留文本表示中可用的所有有效数字。转换为 float
或 double
可能会由于表示差异而导致四舍五入。
我正在使用以下语句从 table 获取浮点值:
NSNumber *f = [NSNumber numberWithDouble:(double)sqlite3_column_double(statement, 0)];
数据库中的值为 23.679999999,但我得到的是 23.68。我试过 numberWithFloat 但我得到了相同的结果。 谁能告诉我如何在不四舍五入的情况下获得价值?
NSNumber
-wrapped-double
不是适合存储十进制值的数据类型。使用 NSDecimalNumber
代替:
unsigned char *c = sqlite3_column_text(statement, 0);
NSNumber *f = nil;
if (c) {
NSString *numStr = [NSString stringWithUTF8String:c];
f = [NSDecimalNumber decimalNumberWithString:numStr];
}
只要您使用本机值,这应该会保留文本表示中可用的所有有效数字。转换为 float
或 double
可能会由于表示差异而导致四舍五入。