从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];
}

只要您使用本机值,这应该会保留文本表示中可用的所有有效数字。转换为 floatdouble 可能会由于表示差异而导致四舍五入。