针对浮点符号错误我能做些什么?
What can I do against floating point notations Errors?
我需要将 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
的工作方式。
我一直在寻找答案,但人们总是说 "use Math.round()
" 这对我不起作用。
我能做些什么来防止这种情况发生?
您可以使用 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
您可以使用 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
我需要将 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
的工作方式。
我一直在寻找答案,但人们总是说 "use Math.round()
" 这对我不起作用。
我能做些什么来防止这种情况发生?
您可以使用 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
您可以使用 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