在 Java 中获得正确的小数?

Getting a proper decimal in Java?

我在做

double x = distance/maxRange;

并希望 x 等于 1/3,例如当 distance = 10 且 maxRange = 30 而不是 0 时。

如何正确格式化它?

谢谢。

double  x =  (double) 1/3;
System.out.println(x); // result print 0.3333333333333333

您必须将计算转换为双精度,否则您将得到 0。

假设 distancemaxRange 是整数,除法总是得到 0。你必须做的是将其中之一变成 double 以强制它进行浮点除法:

double x = ((double) distance) / maxRange;

double: double 数据类型是双精度 64 位 IEEE 754 浮点数。

double z = (double) 1 / 3;
System.out.println("Result Using Double = " + z);
/*
Result Using Double = 0.3333333333333333
*/      

double 有 53 位精度只见于 https://en.wikipedia.org/wiki/Double-precision_floating-point_format。 因此,如果您需要超过 53 位的精度,则使用它的最佳选择 BigDecimal 例如:

BigDecimal distance = new BigDecimal("1");
BigDecimal maxRange = new BigDecimal("3");
BigDecimal x = distance.divide(maxRange, /*precision-scale*/ 100, RoundingMode.HALF_UP);
System.out.println("Result Using BigDecimal=" + x);
 /*
   Result Using BigDecimal=0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
 */

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html