我有一个这样的程序,
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);
bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println("bd value::"+ bd);
System.out.println("bd1 value::"+ bd1);
我得到以下输出:23.09
为bd
,bd1
为0.00,但我希望bd1
为0
而不是0.00
。我正确应用这些方法吗?
答案 0 :(得分:15)
试试这个
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class calculator{
public static void main(String[] args) {
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);
DecimalFormat df = new DecimalFormat("0.##");
System.out.println("bd value::"+ df.format(bd));
System.out.println("bd1 value::"+ df.format(bd1));
}
}
答案 1 :(得分:12)
简单,干净,灵活,易于理解和维护代码
(也适用于double
)
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2); //Sets the maximum number of digits after the decimal point
df.setMinimumFractionDigits(0); //Sets the minimum number of digits after the decimal point
df.setGroupingUsed(false); //If false thousands separator such ad 1,000 wont work so it will display 1000
String result = df.format(bd);
System.out.println(result);
答案 2 :(得分:7)
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1 = new BigDecimal(0.000);
bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println("bd value::"+ bd); System.out.println("bd1 value::"+ bd1);
System.out.println("new way:" + bd1.intValueExact());
// OUTPUT bd值:: 23.09
bd1值:: 0.00
新方式:0
答案 3 :(得分:5)
答案 4 :(得分:3)
你可以这样做
System.out.println("bd value: " + ((bd.scale() == 0) ? bd.unscaledValue() : bd));
答案 5 :(得分:2)
假设您有BigDecimal,其值为23000.00
。您可以使用方法stripTrailingZeros()
,但是会给您“错误”的结果:
BigDecimal bd = new BigDecimal("23000.00");
bd.stripTrailingZeros() // Result is 2.3E+4
您可以通过调用.toPlainString()
并将其传递给BigDecimal构造函数以使其正确处理来对其进行修复:
BigDecimal bd = new BigDecimal("23000.00");
new BigDecimal(bd.stripTrailingZeros().toPlainString()) // Result is 23000
答案 6 :(得分:1)
下面这个方法效果更好IMO
bd1 = bd1.stripTrailingZeros();
System.out.println(bd1.toPlainString());
打印:
0
如果bd1 = 1.2300,则会打印
1.23