Android DecimalFormat舍入错误:添加了随机小数



我正在尝试格式化一个数字。可以是2到6的十进制。

如果我传递一个没有小数的数字,结果是ok的。否则,它会添加随机小数。

    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);

如:Value = 35 -> 35

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

value = 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。请让我知道,如果你看到相同的结果与你上面发布的代码。

最新更新