2011-07-19 126 views
3

我有一個問題,我必須用長小數點打印。 如 1/3 = 0.33333333333333333333333333333333333333(非常長) 使用C時, 我們可以使用 printf(「%。30f」,a); 但我不知道該怎麼使用JavaJava十進制精度問題

+3

*「Java小數精度問題」*有什麼問題?你忘了問一個。 (注意「我不能做X」不是問題。) –

回答

2

您可以使用System.out.printf(doc

但請注意,這僅僅是出於同樣的目的,你用C用printf:用於簡單的調試/學習。

當你需要工業強度的精度,需要BigDecimal

1

在Java中,你可以使用printf的還有,System.out.printf( 「...」,A,B,...)

9

您不會在C或Java中得到IEEE754二進制浮點數的精度小數位。你最好的選擇是使用BigDecimal並以特定的精度執行算術。例如:

import java.math.*; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     MathContext context = new MathContext(30); 
     BigDecimal result = BigDecimal.ONE.divide(new BigDecimal(3), context); 
     System.out.println(result.toPlainString()); 
    } 
} 
0

最簡單的解決方案:

double roundTwoDecimals(double d) { 
      DecimalFormat twoDForm = new DecimalFormat("#.##"); 
     return Double.valueOf(twoDForm.format(d)); 
} 
+0

不起作用。無法工作。錯過了這一點。 – EJP

+0

問題不好。但是,這個代碼的工作原理是最簡單的小數輪迴方式。 – shkschneider

0

double的Java和C/C++ double具有相同的精度。如果你要打印30位小數,你可以使用

double d = 1.0/3; 
System.out.println("%.30f", d); 

然而,雙不具有精度30位(在任何語言),你會得到一個舍入誤差。如果在Java中需要30位精度的小數位,則需要使用BigDecimal。