android号码格式

时间:2011-05-12 13:28:56

标签: java

在我的应用程序中想要在小数点后将一个双精度数加到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;

这两个代码都不适合我。

提前致谢....

6 个答案:

答案 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());