在我正在构建的应用中,我使用了一些非常小的数字(4.12027703723203E-18
,7.685842358296843E-21
,6.882072376426952E-24
,2.7150860398820128E-27
等。
问题在于,当我将它们存储到数组中时,它们变为0.一些代码:
-(BOOL)checkNewInfo:(NSIndexPath*)indexPath andValue:(double)value {
//code omitted
[self.theValues replaceObjectAtIndex:indexPath.row withObject:[NSString stringWithFormat:@"%f", value]];
//code omitted
}
我做了一些调试,结果如下:
(gdb) p (double) value
$1 = 4.12027703723203e-18
(gdb) po [self theValues]
<__NSArrayM 0x6a45dc0>(
1.6086921836575816E-11,
3.7511646463463610E-13,
0.000000,
4.6856843535196843E-21,
9.820723621786952E-24
)
初始数字来自文本文件,可以轻松访问和使用它们。
所以我替换了索引2处的数字(旧5.12027703723203E-18
,新4.12027703723203E-18
)。所以理论上这个数字不应该改变,但实际上它变成了0.000000
。
为了保持数字,我该怎么做?
谢谢,非常感谢任何帮助
答案 0 :(得分:2)
您正在使用%f
进行格式化,因此输出为0.00000
。
如果你想保持16位数的精确度,你应该使用%e
,甚至是%.16e
。
[self.theValues replaceObjectAtIndex:indexPath.row withObject:[NSString stringWithFormat:@"%.16e", value]];
答案 1 :(得分:2)
1。)不要将值存储为字符串,而是存储为NSNumbe或更好,
2.)使用NSDecimalNumber(128位浮点)
答案 2 :(得分:1)
尝试使用%e
或%E
。 %f始终以0.00000格式打印
答案 3 :(得分:-1)
您唯一的选择是以二进制格式存储数字。