-2

我目前正在为 iPhone 应用程序编写 Objective-C 中的计算器。我正在尝试将输出浮点数舍入到最接近的百分之一位置。因此,如果我有一个 1.755 的数字,我希望它显示 1.76。

我目前为此使用的代码如下。

    output.text = [NSString stringWithFormat:@"%.2f", outputVariable];

所以,我的问题是,我怎样才能让它显示到百分之一,并保持我的四舍五入一致?"%.2f" 倾向于在当时想要的任何方向进行舍入和显示,我需要比这更高的精度。

4

1 回答 1

1

考虑你给出的例子,1.755。任何floatdouble对象都不可能包含这个值,因为这个值是不可表示的。floatanddouble类型使用二进制浮点,因此所有值都是 2 的幂的和(包括负幂,例如 1/4 和 2 -10 。1.755 不是任何有限数量的 2 次方的精确和,因此只能近似。

在包含float f = 1.755;ordouble d = 1.755;的源代码中,数字“1.755”被转换为可表示的值。在这种float情况下,结果为 1.75499999523162841796875。对于double,结果为 1.75499999999999989341858963598497211933135986328125。

请注意,这两个值都小于 1.755。因此,如果将任一值四舍五入到小数点后两位小数,则结果为“1.75”。

如果您打算使用诸如 1.755 之类的值进行计算并希望它们精确,那么您必须使用十进制算术或采取其他步骤来避免浮点算术中的错误(例如将值缩放为可精确表示,直到最终输出) . 具体建议取决于您更大的应用程序。

于 2013-05-30T17:44:52.260 回答