【问题标题】:Is it normal that is not rounding while parsing? NumberFormat解析时不四舍五入是否正常?数字格式
【发布时间】:2013-09-15 14:37:30
【问题描述】:

为什么在解析过程中不取整?

NumberFormat format = NumberFormat.getInstance();
System.out.println(format.getMaximumFractionDigits());// 3
System.out.println(format.getRoundingMode());// half even
Double dob = (Double)format.parse("1212.35656");
System.out.println(dob);// output is 1212.35656

【问题讨论】:

    标签: java io format number-formatting


    【解决方案1】:

    要获得您想要的,您需要调用加载的实现 NumberFormat 的格式化程序方法(在您的情况下为 DecimalFromat);我只是在最后添加了所需的行并包裹在一个主目录中:

        import java.text.NumberFormat;
    
        public class NumberFormatRounding {
    
            public static void main(String[] args) throws Exception{
    
    
                NumberFormat formatter = NumberFormat.getInstance();
                System.out.println(formatter.getMaximumFractionDigits());// 3
                System.out.println(formatter.getRoundingMode());// half even
                Double dob = (Double) formatter.parse("1212.35656");
                System.out.println(dob);// output is 1212.35656
                String formattedDob = formatter.format(dob.doubleValue());
                System.out.println(formattedDob);// output is 1212.357
            }
    
        }
    

    注意,formattedDob 是一个字符串

    【讨论】:

      【解决方案2】:

      数字计数仅用于格式化。当你解析一个数字时,你总是会得到与输入最匹配的数字,即使它的数字比NumberFormat 用来格式化的数字多。

      要从字符串中解析一个数字,然后四舍五入到给定的小数位数,您可以使用 java.math 包中的 BigDecimal

      BigDecimal bd = BigDecimal("1212.35656");
      double dob = bd.setScale(3, RoundingMode.HALF_EVEN).doubleValue();
      

      【讨论】:

      • 虽然没有特别的原因?设计说话
      • 这部分文档,在参数中,似乎实际上是在说Parameters: newValue the maximum number of fraction digits to be shown; if less than zero, then zero is used. The concrete subclass may enforce an upper limit to this value appropriate to the numeric type being formatted. 这里,numeric type 似乎暗示仅用于格式化。 Doc
      • 我认为当前的行为是合理的:替代方案会默默地降低数字的精度(= 不好),或者当输入的数字多于预期时抛出异常(= 也不好)跨度>
      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 2010-11-13
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多