将Objective-C浮点数舍入到最接近的.05

时间:2011-04-15 14:55:08

标签: objective-c floating-point rounding

我想将以下浮点数舍入到最接近的0.05。

449.263824 - > 449.25

390.928070 - > 390.90

390.878082 - > 390.85

我该如何实现?

6 个答案:

答案 0 :(得分:13)

匹配问题中的输出,您可以执行以下操作:

float customRounding(float value) {
    const float roundingValue = 0.05;
    int mulitpler = floor(value / roundingValue);
    return mulitpler * roundingValue;
}

示例:

NSLog(@"Output: %f --> %.2f", 449.263824, customRounding(449.263824));

答案 1 :(得分:3)

round()功能。我想你需要这样做:

double rounded = round(number * 20.0) / 20.0;

与所有浮点运算一样,由于1/5不能直接表示为二进制值,因此您会看到奇怪的不完全结果。如果你不喜欢这样,你可以使用NSDecimalNumber的-decimalNumberByRoundingAccordingToBehaviour:方法,但它会慢一些。

答案 2 :(得分:2)

我知道问题已得到解答,但我使用了以下代码:

float unrounded = 2.234;

float decimal = 0.05;
float decimal2 = 1/decimal;
float rounded = (((int)((unrounded*decimal2)+0.5))/decimal2);

例如:

> unrounded = 2.234 
> decimal = 0.05
> decimal2 = 1/0.05 = 20
> 
> rounded:
> 2.234 * 20 = 44.68
> 44.68 + 0.5 = 45.18 
> make an integer: 45 
> 45 / 20 = 2.25

答案 3 :(得分:0)

您可以使用NSNumberFormatter执行舍入,并确实通过NSNumberFormatterRoundingMode选项之一指定所需的舍入值。 (在上面的类引用中搜索“NSNumberFormatterRoundingMode”以查看默认值。)

然而,正如@Jesse在你的问题评论中所述,在你提供的例子中似乎没有任何标准的四舍五入形式。

答案 4 :(得分:0)

如果它是圆形到最接近的x,那么你可以选择:

roundedValue = originalValue + x * 0.5;
roundedValue -= fmodf(roundedValue, x);

实际上,你想要的并不完全清楚。

答案 5 :(得分:0)

使用floor

#include <math.h>
...
double result = floor(number * 20.0) / 20.0;