在我的应用程序中想要在小数点后将一个双精度数加到2位有效数字。我尝试了下面的代码。
public static double round(double value, int places) {
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
我也试过
double val = ....;
val = val*100;
val = (double)((int) val);
val = val /100;
这两个代码都不适合我。
提前致谢....
答案 0 :(得分:19)
正如格拉明所说,如果你想代表钱,请使用BigDecimal。该类支持各种舍入,您可以准确设置所需的精度。
但是要直接回答你的问题,你不能在double上设置精度,因为它是浮点数。它没有具有精度。如果您只是需要这样做来格式化输出,我建议使用NumberFormat。像这样:
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
String output = nf.format(val);
答案 1 :(得分:6)
或者您可以使用java.text.DecimalFormat:
String string = new DecimalFormat("####0.00").format(val);
答案 2 :(得分:2)
如果您尝试代表货币,我建议您使用BigDecimal。
此example可能会有所帮助。
答案 3 :(得分:0)
由于Gramming建议您可以使用BigDecimals,或者使用NumberFormat来确定显示数字的数量
答案 4 :(得分:0)
您的代码似乎对我有用
double rounded = round(0.123456789, 3);
System.out.println(rounded);
>0.123
编辑:刚看到您对自己问题的新评论。这是一个格式问题,而不是数学问题。
答案 5 :(得分:0)
我决定将all用作int。这样就没问题。
DecimalFormatSymbols currencySymbol = DecimalFormatSymbols.getInstance();
NumberFormat numberF = NumberFormat.getInstance();
之后...
numberF.setMaximumFractionDigits(2);
numberF.setMinimumFractionDigits(2);
TextView tv_total = findViewById(R.id.total);
int total = doYourStuff();//calculate the prices
tv_total.setText(numberF.format(((double)total)/100) + currencySymbol.getCurrencySymbol());