double x = distance/maxRange;
而想要X等于1/3例如,当距离= 10和maxRange = 30而不是0
如何我联系有关正确格式化?
谢谢。
double x = distance/maxRange;
而想要X等于1/3例如,当距离= 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;
双:双数据类型是双精度64位IEEE 754浮点。
double z = (double) 1/3;
System.out.println("Result Using Double = " + z);
/*
Result Using Double = 0.3333333333333333
*/
双有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'不具有64位精度,只有53位。只需要'1.0/3'或'1/3.0',比铸件更清洁和更短 –
你的意思是专门'1/3'控制台,而不是'0.33333 ... ' –
'distance'和'maxRange'都是int(或'long's)吗? – MadProgrammer
无论是或将工作1/3或0.3333我必须采取这一数字,并通过其他东西倍数返回。我正在使用双打。 – Carson