2015-09-25 39 views
0

我做在Java中获取正确的小数?

double x = distance/maxRange; 

而想要X等于1/3例如,当距离= 10和maxRange = 30而不是0

如何我联系有关正确格式化?

谢谢。

+2

你的意思是专门'1/3'控制台,而不是'0.33333 ... ' –

+1

'distance'和'maxRange'都是int(或'long's)吗? – MadProgrammer

+0

无论是或将工作1/3或0.3333我必须采取这一数字,并通过其他东西倍数返回。我正在使用双打。 – Carson

回答

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

您必须将计算转换为双,否则你将会获得0

1

假设distancemaxRange都是整数,除法总是会导致0。你必须这样做,把它们编成了double什么迫使它做浮点除法:

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

双:双数据类型是双精度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

+1

'double'不具有64位精度,只有53位。只需要'1.0/3'或'1/3.0',比铸件更清洁和更短 –