强制BigDecimals使用科学记数法

Lus*_*uso 4 java bigdecimal

我有这个方法:

    public void Example(BigDecimal value, int scale){
    BigDecimal x = new BigDecimal("0.00001");
    System.out.println("result: " + (value.multiply(x)).setScale(scale, RoudingMode.HALF_UP).toString());
Run Code Online (Sandbox Code Playgroud)

例如,如果value = 1且scale = 2,则输出为"result:0.00".我以为它会是1.00E-5.所以,我的疑问是:如果BigDecimal的比例大于某个值(在我的例子中是2),我怎么能强制用科学记数法格式化呢?

Ste*_*ing 8

以下是DannyMo的答案版本,它自动设置比例:

private static String format(BigDecimal x)
{
    NumberFormat formatter = new DecimalFormat("0.0E0");
    formatter.setRoundingMode(RoundingMode.HALF_UP);
    formatter.setMinimumFractionDigits((x.scale() > 0) ? x.precision() : x.scale());
    return formatter.format(x);
}

System.out.println(format(new BigDecimal("0.01")));   // 1.0E-2
System.out.println(format(new BigDecimal("0.001")));  // 1.0E-3
System.out.println(format(new BigDecimal("500")));    // 5E2
System.out.println(format(new BigDecimal("500.05"))); // 5.00050E2
Run Code Online (Sandbox Code Playgroud)


Dan*_*yMo 6

您可以使用DecimalFormatwith setMinimumFractionDigits(int scale)

private static String format(BigDecimal x, int scale) {
  NumberFormat formatter = new DecimalFormat("0.0E0");
  formatter.setRoundingMode(RoundingMode.HALF_UP);
  formatter.setMinimumFractionDigits(scale);
  return formatter.format(x);
}
...
System.out.println(format(new BigDecimal("0.00001"), 2)); // 1.00E-5
System.out.println(format(new BigDecimal("0.00001"), 3)); // 1.000E-5
Run Code Online (Sandbox Code Playgroud)