Android小数格式舍入错误:添加随机小数
我正在尝试格式化一个数字。它可以有2到6个小数点 如果我传递一个没有小数点的数字,结果就可以了。 否则,它会添加随机小数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
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。您能在代码示例中提供您的导入吗?您能在代码示例中提供您的导入吗?