2011-06-08 66 views
0

我有一個字符串值,可以包含一個double,整數,ascii或字節值,我把這個值放入JLabel。我希望將雙精度值和長精度值的格式設置爲4000000000000而不是java的JLabel默認打印格式4.0E12。現在我知道字符串中的數據類型是什麼,但我不知道如何使JLabel只顯示雙精度和整數值的非科學形式。如何在JLabel和JTextField上顯示非科學格式的值?

這裏是我試過到目前爲止:

String str = value; // string that holds the value 

switch (var) // var that says which data type my str is 
{ 
    case LONG: 
    //convert my string from scientific to non-scientific here 
    break; 
    case DOUBLE: 
    //convert my string from scientific to non-scientific here 
    break; 
    case ASCII: 
    //do nothing 
    break; 
    ... 
} 

JLabel label = new JLabel(); 
label.setText(str); //Want this to be in non-scientific form 

但這種方法仍然只打印了科學的形式。

編輯:

我的轉換是這樣的:

str = new DecimalFormat("#0.###").format(str); 

也肯定這是一個長期的價值,我留下了一些對clearity數據類型的變量。 我不知道這是否會適用於每種情況,即使我確實得到它的工作。我需要它的工作整數,長期,xtended,雙和浮動。

+1

聽起來像您的轉換不正確。你能提供你如何做轉換的代碼嗎? JLabel將僅打印您提供的文本。如果文本錯誤,則說明文本錯誤。順便說一句,你不能有一個'int'值那麼大,你的意思是'長'嗎? – 2011-06-08 14:54:33

+0

@Peter Lawrey:我已經提供了額外的代碼以及int來解釋這個問題。 – Grammin 2011-06-08 14:58:42

回答

1

您必須使用不同的JLabel,因爲它默認情況下不作任何轉換

JFrame frame = new JFrame(); 
JLabel label = new JLabel(); 
DecimalFormat df = new DecimalFormat("#0.###"); 
label.setText(df.format(4e12)); 
frame.add(label); 
frame.pack(); 
frame.setVisible(true); 

顯示一個窗口,

4000000000000 

我只是得到與轉換以下

DecimalFormat df = new DecimalFormat("#0.###"); 
System.out.println(df.format(400000000)); 
System.out.println(df.format(4000000000000L)); 
System.out.println(df.format(4e12f)); 
System.out.println(df.format(4e12)); 

打印

400000000 
4000000000000 
3999999983616 <- due to float rounding error. 
4000000000000 
+0

是的,這是正確的方法,我確實有另外一個,但是這導致它打印錯誤的值。謝謝! – Grammin 2011-06-08 15:06:19