尝试在java中将int乘以int

时间:2014-02-26 12:36:08

标签: java

我试图将1207.87乘以10000并期待12078700.0但我得到1.2078699999999998E7

我知道它与精度错误有关,但我如何纠正这个问题

修改: -

我只是想删除小数

8 个答案:

答案 0 :(得分:3)

这是因为浮点数表示 你可以:

  • 围绕它Math.round(...)
  • 如果您需要高精度,请使用BigDecimal

有关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);