5

我有这个方法:

    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());

例如,如果 value = 1 且 scale = 2,则输出为“结果:0.00”。我以为会是 1.00E-5。所以,我的疑问是:如果 BigDecimal 的比例大于某个值(在我的示例中为 2),我如何强制它以科学记数法格式化?

4

4 回答 4

10

这是自动设置比例的 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
于 2014-09-11T18:48:06.303 回答
7

您可以使用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
于 2013-08-02T22:46:35.283 回答
0

你可以使用这样的东西:

int maxScale = 2;

BigDecimal value = BigDecimal.ONE;
BigDecimal x = new BigDecimal("0.00001");
BigDecimal result = value.multiply(x);

if (result.scale() > maxScale) {
    System.out.format("result: %.2E\n", result); // You can change .2 to the value you need
} else {
    System.out.println("result: " + result.toPlainString());
}
于 2013-08-02T22:59:08.163 回答
-1

试听DecimalFormat课。它具有用于双精度和长数字方法的格式方法,因此您应该执行以下操作:

BigDecimal x = new BigDecimal("0.00001");
DecimalFormat frmt = new DecimalFormat("0.00E00");
String formatted = frmt.format(x.doubleValue());
System.out.println("result: " + formatted);

十进制格式 javadoc

于 2013-08-02T23:01:53.127 回答