sqlite - 如何避免在从SQLite调用时舍入浮点值

  显示原文与译文双语对照的内容
0 0

我使用下面的语句从表中获取浮点值:


NSNumber *f = [NSNumber numberWithDouble:(double)sqlite3_column_double(statement, 0)];

数据库中的值为 23.679 999999,但我正在获得 23.68. 我试过numberWithFloat但得到了同样的结果。 谁能告诉我如何在不舍入的情况下获取值?

时间: 原作者:

0 0

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 可能导致由于表示不同而导致舍入。

原作者:
...