我想将数字四舍五入到特定数字或它们的倍数。对于整数是可以的,但是当我想像这个例子一样四舍五入到浮点数时会出现问题:
package
我要四舍五入的数量(或多个) :
2.6
当我输入
1
它应该四舍五入2.6
当我输入
2,5
它应该四舍五入2,6
当我输入
3
它应该四舍五入5,2 (2 * 2,6)
我试图用fmod
它来检查可分性,但它对我不起作用。
谢谢大家。
您可以将您的数字除以您的基本浮点数,将其四舍五入到最接近的整数,然后重新相乘。
伪代码
def round_to_float(base_float,to_round)
return ceiling(to_round / base_float) * base_float
end
示例3
:
ceiling(3.0 / 2.6) * 2.6
ceiling(1.15) * 2.6
2 * 2.6
5.2
对于多重检查,您可以使用fmod($to_round,$base_float) == 0
,但不可避免地会出现浮点数不准确的情况,这不是测试浮点数的可靠方法。
可以肯定的是,您应该选择一个足够小的epsilon
(按照计算机上的机器精度的顺序),并确保您的商to_round/base_float
在epsilon
其floor
.
把它们放在一起
def round_to_float(base_float,to_round)
quotient = to_round / base_float
if (absolute_value(quotient - floor(quotient)) < epsilon)
return false
else
return ceiling(quotient) * base_float
end
end
其中 epsilon 是一个非常小的数字。从理论上讲,它应该是您的机器精度……通常是 10^-9。实际上,在大多数用例中 10^-4 应该就足够了。