我一直在想周围,发现很多方法可以在格式化为字符串时从双打中删除.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
但我需要的是像这样的事情
// 11.90
// 1.2
// or 1.002
// or 1
这不是重复的,因为那个会将00添加到我不想要的任何价格...... 我只想删除浮点,如果有后面的零,但如果有一个数字,保持任何零。
e.g。
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 :(得分:2)
1.90
,1.900
或1.90000
应打印出相同的1.90
,1900
或1.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
1.0
,1.00
或1.00000
应打印出1
使用BigDecimal
后,检查它是否为整数就不那么难了:
public static boolean isIntegerValue(BigDecimal bd) {
return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0;
}
答案 1 :(得分:0)
很难理解你在这里的确切意图。我可以理解你可能想要将1.000表示为1(两个值之间存在实际差异,因为一个是浮点数或双精度数,另一个是int或long,但是因为11.9和11.90之间没有差异(它们)用同一个对象表示,将两者区分开来可能非常困难。 除了准确写出每种格式的条件之外,我的建议是在String中获取price的原始值,然后将格式应用为字符串的函数(然后很容易匹配endsWith(“。000”)或无论如何,在其他情况下保留原始格式。