我可以对浮点符号错误做什么?

时间:2017-06-02 17:52:47

标签: java floating-point multiplication floating-accuracy

我需要将float乘以100才能从转换为cents。我遇到的问题是,大数字的值不能正确计算。

例如:

String aa = "1000009.00";
aa = aa.replaceAll(",", ".");
float bb = Float.parseFloat(aa);
bb=Math.round(bb*100);
System.out.println(bb);

我得到的是:1.00000896E8

所以我知道这是因为Java中float的工作方式。 我找了一个答案,但人们总是说"使用Math.round()"这对我不起作用。

我该怎么做才能防止这种情况发生?

2 个答案:

答案 0 :(得分:0)

您可以使用BigDecimal::multiply例如:

String aa = "1000009.00";
aa = aa.replaceAll(",", ".");
BigDecimal fullValue = new BigDecimal(aa);

System.out.println("full value  = " + fullValue.multiply(new BigDecimal(100)));

<强>输出

full value  = 100000900.00

答案 1 :(得分:0)

您可以使用double获得更高的精确度(如果您希望使用非常大的数字,则使用BigDecimal。)

String aa = "1000009.00";
double bb = Double.parseDouble(aa);
bb=Math.round(bb*100);
System.out.printf("%.2f", bb); // it prints only two digits after the decimal point

<强>输出

100000900.00