Java 不带 Math.round、BigDecimal 等的小数点后两位四舍五入
Java Rounding two digits after decimal point without Math.round, BigDecimal, etc
干草,
我只想使用这个数学公式将小数点后两位四舍五入:
例如,数字 831.38849 应四舍五入为 831.39 并打印出来。我试过这样的方法,但没有用:0.01 * (100 * number + 0.5)
我知道以前有人问过类似的问题,但我不能为这项任务使用所有花哨和简单的东西,比如 Math.round, BigDecimal, 等等
所以,花哨的部分是通过将浮点数转换为整数值来处理的。你想消除小数点右边两位的部分,所以你首先将它乘以 100 以移动小数点,加上 0.5 以将任何 0.5 或更高的值四舍五入,转换为 int(或 long)以截断它, 然后除以 100 将小数点后移。
[编辑 -- 添加处理负数的条件,因此它符合 "floor" 的定义。]
double original_number = 831.38849;
double rounded_number = (original_number >= 0)
? ((long) (original_number * 100 + 0.5)) / 100.0
: ((long) (original_number * 100 - 0.5)) / 100.0;
所以数学公式的正确实现
是以下 Java 代码:
Math.floor(100d * number + 0.5) / 100d
注: 100d
也可以写成100.0
、100.
,或简称100
(假设 number
是 double
)
干草,
我只想使用这个数学公式将小数点后两位四舍五入:
例如,数字 831.38849 应四舍五入为 831.39 并打印出来。我试过这样的方法,但没有用:0.01 * (100 * number + 0.5)
我知道以前有人问过类似的问题,但我不能为这项任务使用所有花哨和简单的东西,比如 Math.round, BigDecimal, 等等
所以,花哨的部分是通过将浮点数转换为整数值来处理的。你想消除小数点右边两位的部分,所以你首先将它乘以 100 以移动小数点,加上 0.5 以将任何 0.5 或更高的值四舍五入,转换为 int(或 long)以截断它, 然后除以 100 将小数点后移。
[编辑 -- 添加处理负数的条件,因此它符合 "floor" 的定义。]
double original_number = 831.38849;
double rounded_number = (original_number >= 0)
? ((long) (original_number * 100 + 0.5)) / 100.0
: ((long) (original_number * 100 - 0.5)) / 100.0;
所以数学公式的正确实现
是以下 Java 代码:
Math.floor(100d * number + 0.5) / 100d
注: 100d
也可以写成100.0
、100.
,或简称100
(假设 number
是 double
)