Java - 四舍五入到小数点后两位
Java - rounding double to 2 decimal places
我知道这个问题已经被问过很多次了,但我卡住了,我不知道正确的解决方案应该是什么。我正在编写一个程序,其中有很多数字乘法。结果必须四舍五入到小数点后两位,但有时结果不正确。
例如:
我有两个双打 v1=99.338 和 v2=732.5.
我想将它们相乘并将结果四舍五入到小数点后两位。
正确的结果是 72765.085 所以四舍五入后它应该是 72765.09 但是在计算机中结果是 72765.08499999999 并且所有的四舍五入方法都给出 72765.08 这显然是错误的。
例如
double x= v1 * v2; //x=72765.08499999999
DecimalFormat dec= new DecimalFormat("0.00");
decsetRoundingMode(RoundingMode.HALF_UP);
String v = dec.format(x);
给出 72765.08。此示例中的 RoundingMode.CEILING 工作正常,但 v 和 v2 的其他值是错误的。
NumberFormat nf= NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.format(x);
给出 72765.08。
BigDecimal big = new BigDecimal(x, setScale(2, RoundingMode.HALF_UP);
double v = decWartosc.format(x);
给出 v=72765.08。
还有其他想法吗?
我已经在 C# 中试过了,结果是正确的。
首先99.337 * 732.5 = 72764.3525
,然后NOT 72765.085
。
现在,这段代码:
BigDecimal b1 = new BigDecimal("99.337");
BigDecimal b2 = new BigDecimal("732.5");
BigDecimal result = b1.multiply(b2).setScale(2, RoundingMode.HALF_UP);
System.out.println(result);
输出:
72764.35
您必须使用 BigDecimal
进行计算。
BigDecimal exact = BigDecimal.valueOf(v1).multiply(BigDecimal.valueOf(v2));
BigDecimal big = exact.setScale(2, RoundingMode.HALF_UP);
System.out.println(big.toString());
我知道这个问题已经被问过很多次了,但我卡住了,我不知道正确的解决方案应该是什么。我正在编写一个程序,其中有很多数字乘法。结果必须四舍五入到小数点后两位,但有时结果不正确。
例如: 我有两个双打 v1=99.338 和 v2=732.5.
我想将它们相乘并将结果四舍五入到小数点后两位。 正确的结果是 72765.085 所以四舍五入后它应该是 72765.09 但是在计算机中结果是 72765.08499999999 并且所有的四舍五入方法都给出 72765.08 这显然是错误的。
例如
double x= v1 * v2; //x=72765.08499999999
DecimalFormat dec= new DecimalFormat("0.00");
decsetRoundingMode(RoundingMode.HALF_UP);
String v = dec.format(x);
给出 72765.08。此示例中的 RoundingMode.CEILING 工作正常,但 v 和 v2 的其他值是错误的。
NumberFormat nf= NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.format(x);
给出 72765.08。
BigDecimal big = new BigDecimal(x, setScale(2, RoundingMode.HALF_UP);
double v = decWartosc.format(x);
给出 v=72765.08。 还有其他想法吗?
我已经在 C# 中试过了,结果是正确的。
首先99.337 * 732.5 = 72764.3525
,然后NOT 72765.085
。
现在,这段代码:
BigDecimal b1 = new BigDecimal("99.337");
BigDecimal b2 = new BigDecimal("732.5");
BigDecimal result = b1.multiply(b2).setScale(2, RoundingMode.HALF_UP);
System.out.println(result);
输出:
72764.35
您必须使用 BigDecimal
进行计算。
BigDecimal exact = BigDecimal.valueOf(v1).multiply(BigDecimal.valueOf(v2));
BigDecimal big = exact.setScale(2, RoundingMode.HALF_UP);
System.out.println(big.toString());