如何在浮点后保持双零

时间:2017-03-21 15:31:35

标签: java android format

我一直在想周围,发现很多方法可以在格式化为字符串时从双打中删除.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

2 个答案:

答案 0 :(得分:2)

  

1.901.9001.90000应打印出相同的1.9019001.900000

您无法在基元上保留尾随零,因此0.90.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

答案 1 :(得分:0)

很难理解你在这里的确切意图。我可以理解你可能想要将1.000表示为1(两个值之间存在实际差异,因为一个是浮点数或双精度数,另一个是int或long,但是因为11.9和11.90之间没有差异(它们)用同一个对象表示,将两者区分开来可能非常困难。 除了准确写出每种格式的条件之外,我的建议是在String中获取price的原始值,然后将格式应用为字符串的函数(然后很容易匹配endsWith(“。000”)或无论如何,在其他情况下保留原始格式。