2009-12-01 15 views

回答

15

的字符串,是不是一個真正的轉換,而是你如何顯示數量。您可以使用NumberFormat來指定應該如何顯示數字。

檢查的區別:

double number = 100550000.75; 
NumberFormat formatter = new DecimalFormat("#0.00"); 

System.out.println(number); 
System.out.println(formatter.format(number)); 
+0

你能告訴我如何做相同的數字有小數點。例如1234567812.1212。指數符號將爲1.2345678121212E9。我需要把它帶回1234567812.1212。 如果小數點後面有4位數字,我需要得到4. 如果是5位數字,那麼用5# – sai 2009-12-02 09:01:26

+0

塞,用#。########。您可以在小數點分隔符後添加更多#以提高精度。但請注意,最大精度將取決於您使用的數據類型。例如,如果使用雙精度,則不會得到超過17位的小數位(只需檢查如果在沒有格式器的情況下打印1/3就會發生什麼情況)。因此,如果在小數點分隔符後面包含超過17個#,它不會增加精度。如果您需要比double更高的精度,請參閱BigDecimal類。 – 2009-12-02 09:35:49

11

如何BigDecimal.valueOf(doubleToFormat).toPlainString()

+0

如果我使用toString()而不是toPlainString(),會有什麼區別? – 2016-02-04 08:06:38

+1

@ShiladittyaChakraborty,[API for BigDecimal.toString()](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#toString--)中的第一句話如果需要指數,將使用科學記數法。 – Paul 2016-03-08 17:47:55

0

通過@ b.roth的答案是正確的,只有當它是特定國家的。我用這種方法,並得到國際化問題,因爲new DecimalFormat("#0.00)採取特定國家的小數分隔符。例如,如果一個國家使用十進制分隔符作爲「,」,則由於國際化問題,格式化的值將爲0,00(例如,1.2e2將在某些地方爲120.00,而在一些地方爲120.00),如here ..

,我寧願是`方法(新的BigDecimal( 「1.2e2」)toPlainString())

0

只需添加以下標籤JSPX: -

<f:convertNumber maxFractionDigits="4" minFractionDigits="2" groupingUsed="false"/> 
0
String data = Long.toString((long) 3.42E8); 
System.out.println("**************"+data); 
0

試以下

long l; 
double d; //It holds the double value.such as 1.234E3 
l=Double.valueOf(time_d).longValue(); 

你得到變量l中的十進制值。

0

在Java中使用雙精度和長整數時,您會看到大部分值都以指數形式顯示。

例如:在下面我們將2.35乘以10000並打印結果。

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + a.doubleValue()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + a.doubleValue()); 

結果:

  1. 2.85E-4
  2. 2.85E8

因此,你可以看到結果打印在指數格式。現在,您可能希望以純粹的十進制格式顯示結果,例如:0.000285或285000000.您只需使用類java.math.BigDecimal即可完成此操作。在以下示例中,我們使用BigDecimal.valueOf()將Double值轉換爲BigDecimal,並將其轉換爲.toPlainString()以將其轉換爲普通十進制字符串。

import java.math.BigDecimal; 
//.. 
//.. 

//Division example 
Double a = 2.85d/10000; 
System.out.println("1. " + BigDecimal.valueOf(a).toPlainString()); 

//Multiplication example 
a = 2.85d * 100000000; 
System.out.println("2. " + BigDecimal.valueOf(a).toPlainString()); 

結果:

  1. 0。000285
  2. 2.85億

上述方法的唯一缺點是,它產生一些長串。您可能想要限制該值並將該數字舍入爲5或6小數點。爲此,您可以使用java.text.DecimalFormat類。在下面的示例中,我們將數字四捨五入爲小數點後4位並打印輸出。

import java.text.DecimalFormat; 
//.. 
//.. 

Double a = 2.85d/10000; 
DecimalFormat formatter = new DecimalFormat("0.0000"); 
System.out.println(formatter .format(a)); 

結果:

0.0003

我剛纔試圖用一條線來壓縮此代碼,它會打印的 'A' 保留兩位小數值:

new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString()); 

快樂轉換:)

0

你可以這樣做:

BigDecimal 
    .valueOf(value) 
    .setScale(decimalLimit, RoundingMode.HALF_UP) 
    .toPlainString()