42

可能重复:
如何在 Java 中将数字四舍五入到 n 位小数

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

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

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

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

我只希望数字采用格式x.xx。第一个数字应该是1.30,等等。

4

4 回答 4

122

1.2975118E7科学记数法

1.2975118E7 = 1.2975118 * 10^7 = 12975118

此外,Math.round(f)返回一个整数。你不能用它来获得你想要的格式x.xx

你可以使用String.format.

String s = String.format("%.2f", 1.2975118);
// 1.30
于 2012-06-17T15:12:19.373 回答
55

如果您正在寻找货币格式(您没有指定,但似乎这就是您要寻找的),请尝试该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

于 2012-06-17T15:19:02.677 回答
8

你可以利用DecimalFormat给你你想要的风格。

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

由于它采用科学计数法,因此您将无法获得小于 10 7的数字而不会损失那么多数量级的精度。

于 2012-06-17T15:21:21.737 回答
0

尝试查看BigDecimal类。它是货币的首选,支持精确的四舍五入。

于 2012-06-17T15:12:06.937 回答