我试图将1207.87乘以10000并期待12078700.0但我得到1.2078699999999998E7
我知道它与精度错误有关,但我如何纠正这个问题
修改: -
我只是想删除小数
答案 0 :(得分:3)
这是因为浮点数表示 你可以:
Math.round(...)
有关What Every Computer Scientist Should Know About Floating-Point Arithmetic的更多信息。
答案 1 :(得分:2)
试试这个:
1207.87f * 10000
结果将是:
1.20787E7
答案 2 :(得分:1)
你需要做CAST:
(int) 1207.87 * 10000
答案 3 :(得分:0)
如果您使用double
类型,则无法解决此问题。如果您使用BigDecimal
,则可以。
答案 4 :(得分:0)
尝试使用十进制格式,如:
DecimalFormat f = new DecimalFormat("#0.00");
f.format(Double.valueOf(yourDouble));
希望这可以帮到你!
答案 5 :(得分:0)
double以java和许多其他语言的exponental精度存储。有关float,double及其变体
的更多信息,请参阅IEEE754如果需要整数结果,则转换浮点数或结果。如果您只想以“普通表示法”打印浮动数字,那么您可以使用课程NumberFormat
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
取自here
的示例最后你可以使用BigDecimal类的固定精度数字,但是请注意这通常不是硬件(FPU)加速,所以会减慢你的计算速度,但会给你一个固定的错误。这种数字特别适用于必须知道错误的模拟
答案 6 :(得分:0)
您可以使用格式化输出,如下所示:
double ans = 1207.87 * 10000;
System.out.printf("ans: %.0f\n", ans);
输出:
ans: 12078700
答案 7 :(得分:0)
简单的方法就是这个:
Double j = 1207.87;
int x = j.intValue();
System.out.println(x * 10000);