2017-03-21 79 views
0

我一直在想,並且發現很多方法從格式化到字符串時從雙打中刪除.0,但從未找到如何保留價格的東西。如何在浮點後保持零從零開始

DecimalFormat format = new DecimalFormat(); 
format.setDecimalSeparatorAlwaysShown(false); 
switch (position){ 
    case 0:price = 11.90;break; 
    case 1:price = 1.2;break; 
    case 2:price = 1.002;break; 
    case 3:price = 1.0000;break; 
} 
System.out.println(format.format(price)); 
// 11.9 
// or 1.2 
// or 1.002 
// or 1 

,但我需要的是womthing這樣

// 11.90 
// 1.2 
// or 1.002 
// or 1 

這不是重複的,因爲人會增加00到我不想...... 我只想找任何代價如果在它後面有零,則移除浮點,但如果存在一個數字則保留任何零。

例如

1.0, 1.00 or 1.00000 
should print out 1 

1.90, 1.900 or 1.90000 
should print out the same 1.90, 1900 or 1.900000 
+0

你真的[不應該使用'貨幣double'(http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency)。 – azurefrog

+0

您可能必須在指定價格的同時指定格式,無論是在交換機...情況下。因爲您指定的打印格式中沒有真正的圖案。或者把它們打印成字符串,而不是雙打。 – AntonH

+0

@AntonH我正在尋找的模式是刪除浮點數「」。「只有當它不存在,所以任何數字與x.0,x.00或x.0000000將x,但x.20將x.20 –

回答

1

1.901.9001.90000應該打印出來的一樣1.9019001.900000

你不能讓一個原始的尾隨零,所以0.9是完全相同的常數0.90

C#有decimal但是Java爲此沒有原始數據類型。

的Java確實有一個等價類有類似的行爲,BigDecimal

BigDecimal d1 = BigDecimal.valueOf(9, 1); // 9/10^1 
BigDecimal d2 = BigDecimal.valueOf(90, 2); // 9/10^2 
System.out.println(d1); //0.9 
System.out.println(d2); //0.90 

http://ideone.com/1gIgIR

1.01.001.00000 應打印出1

一旦使用BigDecimal,它是不是很難檢查它是否是一個整數:

public static boolean isIntegerValue(BigDecimal bd) { 
    return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0; 
} 

https://stackoverflow.com/a/12748321/360211

0

這是很難理解你在這裏的確切意圖。我可以理解你可能想要將1.000表示爲1(兩個值之間存在實際差異,因爲一個是浮點數或雙精度值,另一個是整數或長整數,但由於11.9和11.90之間沒有差別 我的建議,除了完全寫下每種格式的條件之外,我們的建議是在String中獲得價格的原始值,然後將格式應用爲字符串的函數(它是那麼容易搭配的endsWith(」 000" )或什麼,並保留原來的格式在其他情況下。

+0

它會工作,但不完全是我在找什麼 –