2012-04-07 27 views
1

所以我有這樣的代碼如何在java中將數字舍入到6個有效數字?

BigDecimal bd = new BigDecimal(i); 
    bd = bd.round(new MathContext(6)); 
    double meters = bd.doubleValue(); 
    double km = bd.doubleValue()*0.001; 
    double cm = bd.doubleValue()*100; 
    double mm = bd.doubleValue()*1000; 
    double miles = bd.doubleValue()*0.000621371192; 
    double inches = bd.doubleValue()*39.3700787; 
    double feet = bd.doubleValue()*3.2808399; 
    double yards = bd.doubleValue()*1.0936133; 
    double points = bd.doubleValue()*2834.64567; 

所以,我發現這裏的例子告訴我做它像這樣

BigDecimal bd = new BigDecimal(i); 
    bd = bd.round(new MathContext(6)); 
    double meters = bd.doubleValue(); 

和多數民衆贊成什麼我想,這輪米數不過英寸,英尺,碼等數字不會變圓。我做錯了嗎?什麼是正確的方式去做這件事?

編輯:好了,所以我發現的東西,萬一別人已經努力過了它 一個問題,而不是使用:

double points = bd.doubleValue()*2834.64567; 

我這樣做:

BigDecimal points = new BigDecimal(i*2834.64567); 
points = points.round(new MathContext(6)); 
+2

我最好使用'Double'和['NumberFormat'](http://docs.oracle.com/javase/7/ docs/api/java/text/NumberFormat.html)。當您只需要6位有效數字時,使用BigDecimal似乎毫無意義的矯枉過正。 – 2012-04-07 09:06:36

+0

我認爲這複製/涉及http://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java – joran 2012-04-07 09:24:51

+0

另一種可能的重複 - http:// stackoverflow.com/questions/202302/rounding-to-an-arbitrary-number-of-significant-digits – luketorjussen 2012-04-07 10:36:30

回答

0

您可以使用BigDecimal; 例如:

double d = 15.3343243; 
     BigDecimal bd = new BigDecimal(d); 
     bd = bd.setScale(2, BigDecimal.ROUND_CEILING); 
     bd = new BigDecimal(0.001 * bd.doubleValue()); 
     d = bd.doubleValue(); 
     System.out.println(d); 

或不BigDecimal對象:

 System.out.println((double)((int) (d * 1000))/1000); 
+0

是的,這就是我所做的,但它只適用於第一個而不是其他 – kennie 2012-04-07 09:29:13