将NSString转换为float会产生不精确的值

时间:2012-02-26 16:50:53

标签: cocoa cocoa-touch floating-point nsstring numbers

我的视图中有两个文本字段。在提示用户输入值后,我将它们转换为float来进行计算。

我使用以下代码:

variable1 = [textField1.text floatValue];
variable2 = [textField2.text floatValue];`

当用户在textField1中输入22.8时,我在variable1中获得22.80005。

我没有得到确切的价值!

如何获得精确的十进制值?任何添加都可能影响计算的准确性。

3 个答案:

答案 0 :(得分:6)

关于浮点精度的另一个问题就是如此!

您应该使用NSDecimalNumber代替:

NSDecimalNumber *variable1 = [NSDecimalNumber decimalNumberWithString:[textField1 text]];
NSDecimalNumber *variable2 = [NSDecimalNumber decimalNumberWithString:[textField2 text]];

Number and Value Programming Guide.

中还有一些信息

答案 1 :(得分:3)

您不能:根据定义,浮点数不是精确值,只是估计值。你应该得到这样的偏差。

答案 2 :(得分:3)

这取决于您正在进行的计算。

货币使用NSDecimalNumber。 对于其他计算,请使用double而不是float。当数字从十进制表示法转换为二进制表示法时,会出现精度问题。 double会给你更好的精确度(不精确但更精确),它应该足以满足你想做的任何事情。

如何在计算机上进行精确计算,但它们更复杂,并且总是比floatdouble慢得多。