97

如何获得小数点后只有两位数的双精度值。

例如

如果

i=348842.
double i2=i/60000;
tv.setText(String.valueOf(i2));

此代码生成5.81403333

但我只想要5.81.

那我该怎么办?

4

7 回答 7

191

使用DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数。它具有多种功能,旨在使在任何语言环境中解析和格式化数字成为可能,包括对西方、阿拉伯和印度数字的支持。它还支持不同类型的数字,包括整数 (123)、定点数 (123.4)、科学计数法 (1.23E4)、百分比 (12%) 和货币金额 ($123)。所有这些都可以本地化。

代码片段-

double i2=i/60000;
tv.setText(new DecimalFormat("##.##").format(i2));

输出-

5.81

于 2012-06-09T08:06:27.533 回答
147

怎么样String.format("%.2f", i2)

于 2012-06-09T08:39:48.500 回答
29

在这里,我将向您展示如何使您的十进制数变短。在这里,我将把它缩短到小数点后的 4 个值。

  double value = 12.3457652133
  value =Double.parseDouble(new DecimalFormat("##.####").format(value));
于 2012-12-13T05:38:30.707 回答
17

许多其他答案只做格式化。这种方法将返回,而不仅仅是打印格式。

double number1 = 10.123456;
double number2 = (int)(Math.round(number1 * 100))/100.0;
System.out.println(number2);
于 2013-07-10T04:44:26.647 回答
9

我认为最好和最简单的解决方案是(KISS):

double i = 348842;
double i2 = i/60000;
float k = (float) Math.round(i2 * 100) / 100;
于 2012-06-09T09:16:32.860 回答
3
i=348842.
double i2=i/60000;
DecimalFormat dtime = new DecimalFormat("#.##"); 
i2= Double.valueOf(dtime.format(time));
v.setText(String.valueOf(i2));
于 2012-06-09T08:15:40.427 回答
3

在将数字格式化为 char 序列时,开发人员头脑中应该弹出的第一件事应该是关心这些细节,比如是否可以反转操作。

其他方面是提供适当的结果。所以你想截断数字或四舍五入。

所以在你开始之前,你应该问问自己,我是否对价值感兴趣。

为了实现您的目标,您有多种选择,但其中大多数是指FormatFormatter,但我只是建议查看这个答案

于 2012-06-09T09:09:44.743 回答