Android小数格式舍入错误:添加随机小数

Android小数格式舍入错误:添加随机小数,android,format,number-formatting,Android,Format,Number Formatting,我正在尝试格式化一个数字。它可以有2到6个小数点 如果我传递一个没有小数点的数字,结果就可以了。 否则,它会添加随机小数 float value = ...; DecimalFormat formatter_currency = new DecimalFormat(); DecimalFormatSymbols nf = new DecimalFormatSymbols(); nf.setDecimalSeparator('.'); nf.setG

我正在尝试格式化一个数字。它可以有2到6个小数点

如果我传递一个没有小数点的数字,结果就可以了。 否则,它会添加随机小数

    float value = ...;

    DecimalFormat formatter_currency = new DecimalFormat();
    DecimalFormatSymbols nf = new DecimalFormatSymbols();  

    nf.setDecimalSeparator('.');
    nf.setGroupingSeparator(',');

    formatter_currency.setDecimalFormatSymbols(nf);
    formatter_currency.setMaximumFractionDigits(8);
    formatter_currency.setMinimumFractionDigits(2);

    return formatter_currency.format(value);
例如: 值=35->35.00

值=35.6->35.65932558(预期值为35.60)

值=35.659->35.68899918(预期值为35.659)

我读过,这可能是浮点变量的问题。 我试过双打,但结果是一样的

我怎样才能解决这个问题


谢谢

我编写了这个快速测试程序,它似乎通过了您所有的测试用例:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class FormatTest { 
    public static void main(String[] args) { 
        double value = 35.659;

        DecimalFormat formatter_currency = new DecimalFormat();
        DecimalFormatSymbols nf = new DecimalFormatSymbols();  

        nf.setDecimalSeparator('.');
        nf.setGroupingSeparator(',');

        formatter_currency.setDecimalFormatSymbols(nf);
        formatter_currency.setMaximumFractionDigits(8);
        formatter_currency.setMinimumFractionDigits(2);

        System.out.println(formatter_currency.format(value));
    }
}

请尝试在您的计算机上编译它,并尝试输入不同的值。我基本上只是用了一个
double
,而不是
float
。如果您看到与上面发布的代码相同的结果,请告诉我。

我编写了这个快速测试程序,它似乎通过了您所有的测试用例:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class FormatTest { 
    public static void main(String[] args) { 
        double value = 35.659;

        DecimalFormat formatter_currency = new DecimalFormat();
        DecimalFormatSymbols nf = new DecimalFormatSymbols();  

        nf.setDecimalSeparator('.');
        nf.setGroupingSeparator(',');

        formatter_currency.setDecimalFormatSymbols(nf);
        formatter_currency.setMaximumFractionDigits(8);
        formatter_currency.setMinimumFractionDigits(2);

        System.out.println(formatter_currency.format(value));
    }
}

请尝试在您的计算机上编译它,并尝试输入不同的值。我基本上只是用了一个
double
,而不是
float
。如果您看到与上面发布的代码相同的结果,请告诉我。

浮动
的表示方式与
双倍
的表示方式相同,只需要一半的存储空间和明显的精度损失。@Holmes我理解,我只是说我在切换浮点数和双倍点数时无法重现这个问题,这与OP在问题中所说的相矛盾。它更好,但仍然不准确。我试过使用35.63,输出为35.630000107。浮点数的表示方式与双精度浮点数的表示方式相同,只占用了一半的存储空间,并且伴随着明显的精度损失。@Holmes我明白,我只是说在切换浮点数和双精度时无法再现问题,这与OP在问题中的陈述相矛盾。它更好,但仍然不准确。我试过使用35.63,输出为35.630000107。您能在代码示例中提供您的导入吗?您能在代码示例中提供您的导入吗?