Forcing BigDecimals to use scientific notation

后端 未结 4 1504
忘掉有多难
忘掉有多难 2020-12-06 08:34

I have this method:

    public void Example(BigDecimal value, int scale){
    BigDecimal x = new BigDecimal(\"0.00001\");
    System.out.println(\"result: \"         


        
相关标签:
4条回答
  • 2020-12-06 08:39

    Here is a version of DannyMo's answer that sets the scale automatically:

    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
    
    0 讨论(0)
  • 2020-12-06 08:42

    You can use a DecimalFormat with 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
    
    0 讨论(0)
  • 2020-12-06 08:46

    Try the DecimalFormat class. It has format methods for methods for double and long numbers so you should do something like this:

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

    DecimalFormat javadoc

    0 讨论(0)
  • 2020-12-06 08:55

    You could use something like this:

    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());
    }
    
    0 讨论(0)
提交回复
热议问题