我想将以下浮点数舍入到最接近的0.05。
449.263824 - > 449.25
390.928070 - > 390.90
390.878082 - > 390.85
我该如何实现?
答案 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;