double数据类型+ iphone

时间:2011-06-21 11:43:37

标签: iphone types double

我有一个我知道的应用程序双倍的范围是**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 这是错误的我是否改变数据类型或我该如何更改我的代码

2 个答案:

答案 0 :(得分:6)

编号349012345667812124有18位小数。 double格式仅提供略小于16的精度十进制数字(实际数字不是整数,因为格式的二进制数字不直接对应于十进制数字)。因此,完全可以预期最后的2位或3位数字无法准确表示,并且在文本“349012345667812124”被解析为double格式之前已经发生,在任何计算发生之前。

您获得预期结果且编号为34901234566781212的事实并不意味着什么;它恰好足够接近double格式所代表的最接近的值。

要避免此问题,请使用NSDecimalNSDecimalNumber类型。

答案 1 :(得分:1)

使用

NSDecimalNumber * dec=[[NSDecimalNumber decimalNumberWithString:value.text locale:  [NSLocale currentLocale]] decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"100" locale:[NSLocale currentLocale]]];  
NSLog(@"%@",dec);

而不是Double