Objective-C - 如何提高浮点数的精度

时间:2012-02-26 17:49:05

标签: objective-c floating-point precision

有人可以告诉我如何将浮点数的精度设置为所需的长度。说我的号码是2504.6。如你所见,这里的精度只有1.我想把它设置为六。我需要这个,因为我将这个值与从中获得的值进行比较  [txtInput.text floatValue]。即使我在文本框中输入2504.6,它也会增加5个精度,并且将为2504.600098。当我比较这两个值时,它们看起来并不相等。

3 个答案:

答案 0 :(得分:3)

浮动是近似的。存储浮点数的方式不允许任意精度。浮点数(和双精度数)用于存储非常大(或小)的值,但不是精确值。

如果您需要非常精确的非整数,请使用int(或long)并对其进行缩放。你甚至可以编写自己的对象类来处理它。

它们似乎不相等

之前已经问过这个问题

Comparing float and double data types in objective C

Objective-C Float / Double precision

Make a float only show two decimal places

答案 1 :(得分:3)

使用'equal'运算符比较两个浮点变量A和B并不是一个好主意,因为浮点数的精度有限。比较浮点数的最佳方法是

fabs(A - B) < eps  

其中eps是一个非常小的值,比如0.0001

如果您使用表示浮点值的字符串操作,则只能比较字符串而不是数字。

答案 2 :(得分:3)

您可以使用NSDecimalNumber来比较这些数字:

NSDecimalNumber *number = [NSDecimalNumber numberWithFloat:2504.6f];
NSDecimalNumber *input = [NSDecimalNumber decimalNumberWithString:txtInput.text];
NSComparisonResult result = [number compare:input];

if (result == NSOrderedAscending) {
    // number < input
} else if (result == NSOrderedDescending) {
    // number > input
} else {
    // number == input
}
相关问题