2015-09-25 36 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',比鑄件更清潔和更短 –