Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析时不舍入是正常的吗?数字格式_Java_Io_Format_Number Formatting - Fatal编程技术网

Java 解析时不舍入是正常的吗?数字格式

Java 解析时不舍入是正常的吗?数字格式,java,io,format,number-formatting,Java,Io,Format,Number Formatting,为什么它不在解析过程中循环 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(d

为什么它不在解析过程中循环

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

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

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

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

要获得您想要的,您需要调用加载的实现NumberFormat的格式化程序metod(在您的例子中是DecimalFromat);我只是在末尾添加了所需的行,并用main包装:

    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
        }

    }

请注意,格式化的dob是一个字符串

,但没有特殊原因吗?设计说明文档的这一部分,在参数中,似乎实际上表示
Parameters:newValue要显示的小数位数的最大数目;如果小于零,则使用零。具体的子类可能会对该值强制执行一个上限,该上限适用于正在格式化的数值类型。
这里,
数值类型
似乎暗示仅用于格式化。我认为当前的行为是合理的:替代方案是默默地降低数字的精度(=坏),或者在输入的位数超过预期(=也坏)时引发异常