2017-04-04 82 views
-2

我有最後兩位數字的閥值必須圓整的值。這個功能我可以在JavaScript中實現toFixed(6)。但如何才能實現在Java代碼中Java中toFixed函數的替代方法

例相同:

Input=75.74306816000052 
Input =26.910038862000476 

Output=75.743070 
Output=26.910040 

代碼:

BigDecimal Output= new BigDecimal(Input).setScale(6, RoundingMode.HALF_EVEN) 

但未來聽到的輸出值

75.743068 
26.910038 
+1

Java代碼似乎返回正確的結果。爲什麼輸出應該是75.743070?這不是正確的四捨五入。 –

+0

我讀了'toFixed'的描述,它只是做標準舍入(最後2位數字沒有任何內容),所以Java代碼完全一樣。 – john16384

+0

Javascript的toFixed(6)實際上返回75.743068,與Java相同。必須有另一部分代碼將結果進一步舍入到小數點後5位。 –

回答

1

由於在你的帖子下的評論已經說明,在java中的舍入是cor直接,我不知道你想達到什麼。但是,這給你輸出你期望:

public static void main(String[] args) throws Exception { 
    String Input="75.74306816000052"; 
    String Input2 = "26.910038862000476"; 
    BigDecimal Output= new BigDecimal(Input).setScale(5, RoundingMode.HALF_EVEN); 
    System.out.println(Output.setScale(6)); //75.743070 
    BigDecimal Output2= new BigDecimal(Input2).setScale(5, RoundingMode.HALF_EVEN); 
    System.out.println(Output2.setScale(6)); //26.910040 
} 
+0

實際上,即使Javascript toFixed(6)調用返回75.743068(與Java相同)。我不知道OP從哪裏得到75.743070。 –

0

爲什麼你不使用String::format和您的字符串轉換爲BigDecimal這樣的:

String num1 = String.format(Locale.UK, "%.5f", 75.74306816000052); 
String num2 = String.format(Locale.UK, "%.5f", 26.910038862000476); 
//----------------------------------------^----------------------- 

BigDecimal b1 = new BigDecimal(num1); 
BigDecimal b2 = new BigDecimal(num2); 

System.out.println(b1); 
System.out.println(b2); 

這可以爲您提供:

75,74307 
26,91004 

編輯

您的解決方案的工作完美,但隨着5,而不是6:

BigDecimal Output= new BigDecimal(26.910038862000476).setScale(5, RoundingMode.HALF_EVEN); 

本刊:

26.91004 
相關問題