我有一个应用程序,我知道 double 的范围是**1.7E +/- 308(15位数字)。**
但在我的应用程序中我必须划分文本框值为 100.0 我的代码是
double value=[strPrice doubleValue]/100.0;
NSString *stramoount=[@"" stringByAppendingFormat:@"%0.2f",value ];
当我将34901234566781212除以100时,它会给我349012345667812.12,但是当我输入时 349012345667812124 并除以 100 它给我 100 它给我 3490123456678121.00 这是错误的,无论我更改数据类型还是我如何更改我的代码
最佳答案
号码 349012345667812124 有 18 位十进制数字。 double
格式仅提供略小于 16 位十进制数字的精度(实际数字不是整数,因为该格式的二进制数字并不直接对应于十进制数字)。因此,完全可以预料到最后 2 或 3 位数字无法准确表示,并且在任何计算发生之前,当文字“349012345667812124”被解析为 double
格式时,这种情况就已经发生了。
您获得数字 34901234566781212 的预期结果这一事实没有任何意义;它恰好足够接近 double
格式可以表示的最接近的值。
要避免此问题,请使用 NSDecimal
或 NSDecimalNumber
类型。
关于iphone - 双数据类型+iphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424692/