13

我想在java中截断一个浮点数和一个双精度值。

以下是我的要求: 1. 如果我有 12.49688f,它应该打印为 12.49 不四舍五入 2. 如果它是双精度 12.456,它应该打印为 12.45 不四舍五入 3. 无论如何,如果值像12.0,它应该只打印为 12。

条件3要始终牢记。它应该与截断逻辑同时发生。

4

6 回答 6

27

试试这个-

DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(12.49688f));
System.out.println(df.format(12.456));
System.out.println(df.format(12.0));

在这里,我们使用十进制格式化程序进行格式化。roundmode 设置为 DOWN,因此它不会自动舍入小数位。

预期结果是:

12.49
12.45
12
于 2012-04-26T11:51:19.363 回答
5

我在使用 Android 时遇到了同样的问题,您可以改用:

DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);

但是对于这个 API 级别 9 是必需的。

另一个快速的解决方案是:

double number = 12.43543542;
int aux = (int)(number*100);//1243
double result = aux/100d;//12.43
于 2013-08-11T13:34:26.027 回答
4
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
于 2012-08-01T18:46:01.057 回答
2

看看DecimalFormat()

DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
于 2012-04-26T11:40:12.883 回答
1

查看java.math.BigDecimal.round(MathContext).

于 2012-04-26T11:37:28.373 回答
0

尝试使用DecimalFormat并设置RoundingMode以匹配您的需要。

于 2012-04-26T11:47:01.107 回答