我的视图中有两个文本字段。在提示用户输入值后,我将它们转换为float
来进行计算。
我使用以下代码:
variable1 = [textField1.text floatValue];
variable2 = [textField2.text floatValue];`
当用户在textField1
中输入22.8时,我在variable1
中获得22.80005。
我没有得到确切的价值!
如何获得精确的十进制值?任何添加都可能影响计算的准确性。
答案 0 :(得分:6)
关于浮点精度的另一个问题就是如此!
您应该使用NSDecimalNumber
代替:
NSDecimalNumber *variable1 = [NSDecimalNumber decimalNumberWithString:[textField1 text]];
NSDecimalNumber *variable2 = [NSDecimalNumber decimalNumberWithString:[textField2 text]];
中还有一些信息
答案 1 :(得分:3)
您不能:根据定义,浮点数不是精确值,只是估计值。你应该得到这样的偏差。
答案 2 :(得分:3)
这取决于您正在进行的计算。
货币使用NSDecimalNumber
。
对于其他计算,请使用double
而不是float
。当数字从十进制表示法转换为二进制表示法时,会出现精度问题。 double
会给你更好的精确度(不精确但更精确),它应该足以满足你想做的任何事情。
如何在计算机上进行精确计算,但它们更复杂,并且总是比float
或double
慢得多。