我需要将一个浮点数舍入到Java中的两个小数位

时间:2012-06-17 15:09:08

标签: java android floating-point

  

可能重复:
  How to round a number to n decimal places in Java

我很难将浮点数舍入到小数点后两位。我已经尝试了一些我在这里看到的方法,包括只使用Math.round(),但无论我做什么,我都会得到不寻常的数字。

我有一个我正在处理的浮动列表,列表中的第一个显示为1.2975118E7。什么是E7

当我使用Math.round(f)(f是浮点数)时,我得到完全相同的数字。

我知道我做错了什么,我只是不确定是什么。

我只想让数字采用x.xx格式。第一个数字应为1.30等。

4 个答案:

答案 0 :(得分:95)

1.2975118E7scientific notation

1.2975118E7 = 1.2975118 * 10^7 = 12975118

此外,Math.round(f)返回一个整数。您无法使用它来获得所需的格式x.xx

您可以使用String.format

String s = String.format("%.2f", 1.2975118);
// 1.30

答案 1 :(得分:47)

如果您正在寻找货币格式(您没有指定,但似乎这是您正在寻找的),请尝试NumberFormat类。这很简单:

double d = 2.3d;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String output = formatter.format(d);

将输出(取决于区域设置):

$2.30

此外,如果不需要货币(只是精确的两位小数),您可以改为使用它:

NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String output = formatter.format(d);

将输出2.30

答案 2 :(得分:7)

您可以使用DecimalFormat为您提供您想要的风格。

DecimalFormat df = new DecimalFormat("0.00E0");
double number = 1.2975118E7;
System.out.println(df.format(number));  // prints 1.30E7

由于它是科学记数法,你将无法获得小于10 7 的数字,而不会失去那么多的准确度。

答案 3 :(得分:-2)

尝试查看BigDecimal类。这是货币的上课和支持准确的舍入。