double temp = 64.1;
System.out.println("Result = " + (temp*1000));
结果将是:
Result = 64099.99999999999
但实际结果应为64100
如果是双数据类型
double a = ((temp * 1000) % (0.5 * 1000));
a=7.275957614183426E-12;
如果将其投射到浮动
((((float) temp) * 1000) % (0.5 * 1000));
a=0.0;
为什么会出现这种情况?
答案 0 :(得分:3)
是一个典型的数字问题,浮点数,当您多个时,例如double * int。
第一个选项使用Math.round:
Math.round((temp*1000))
第二个选项使用BigDecimal类:
BigDecimal temp = BigDecimal.valueOf(64.1);
BigDecimal thousand = BigDecimal.valueOf(1000);
BigDecimal result = temp.multiply(thousand);
//example how to extract int or double value
int intResult = result.intValue();
double doubleResult = result.doubleValue();
System.out.println("Result = " + result);
答案 1 :(得分:0)
我认为你可以使用JAVA的ceil()方法。
double temp = 64.1;
System.out.println(“Result =”+ Math.ceil(temp * 1000));
我希望这会有所帮助。
答案 2 :(得分:0)
Java中的double表示浮点数。它有64位值,包括:
来源:https://en.wikipedia.org/wiki/Double-precision_floating-point_format
与固定点数(byte,int,long)不同,浮点数不能始终始终返回完全相同的数字表示。这就是为什么你得到结果64099.99999999999而不是64100的原因。
在Java中使用BigDecimal以便更好地控制小数位。
来源:https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html
答案 3 :(得分:-1)
试试这个
double temp = 64.1;
int x = 1000;
System.out.println("Answer :" + Math.round((temp*x)));