0

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

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
4

2 回答 2

2

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

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

BigDecimal bd = BigDecimal("1212.35656");
double dob = bd.setScale(3, RoundingMode.HALF_EVEN).doubleValue();
于 2013-09-11T14:15:55.640 回答
0

要获得您想要的,您需要调用加载的实现 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 是一个字符串

于 2013-09-11T14:40:05.120 回答