我有一个我知道的应用程序双倍的范围是**1.7E +/- 308 (15 digits).**
但是在我的应用程序中我必须将文本框的值设置为 100.0 我的代码是
double value=[strPrice doubleValue]/100.0;
NSString *stramoount=[@"" stringByAppendingFormat:@"%0.2f",value ];
当我通过 100 划分 34901234566781212 时,它会给我 349012345667812.12 但是当我输入时 349012345667812124 并且 100 它给我 100 它给我 3490123456678121.00 这是错误的我是否改变数据类型或我该如何更改我的代码
答案 0 :(得分:6)
编号349012345667812124有18位小数。 double
格式仅提供略小于16的精度十进制数字(实际数字不是整数,因为格式的二进制数字不直接对应于十进制数字)。因此,完全可以预期最后的2位或3位数字无法准确表示,并且在文本“349012345667812124”被解析为double
格式之前已经发生,在任何计算发生之前。
您获得预期结果且编号为34901234566781212的事实并不意味着什么;它恰好足够接近double
格式所代表的最接近的值。
要避免此问题,请使用NSDecimal
或NSDecimalNumber
类型。
答案 1 :(得分:1)
使用
NSDecimalNumber * dec=[[NSDecimalNumber decimalNumberWithString:value.text locale: [NSLocale currentLocale]] decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"100" locale:[NSLocale currentLocale]]];
NSLog(@"%@",dec);
而不是Double