在 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。
假设 distance
和 maxRange
是整数,除法总是得到 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
我在做
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。
假设 distance
和 maxRange
是整数,除法总是得到 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