我想在java中截断一个浮点数和一个双精度值。
以下是我的要求: 1. 如果我有 12.49688f,它应该打印为 12.49 不四舍五入 2. 如果它是双精度 12.456,它应该打印为 12.45 不四舍五入 3. 无论如何,如果值像12.0,它应该只打印为 12。
条件3要始终牢记。它应该与截断逻辑同时发生。
我想在java中截断一个浮点数和一个双精度值。
以下是我的要求: 1. 如果我有 12.49688f,它应该打印为 12.49 不四舍五入 2. 如果它是双精度 12.456,它应该打印为 12.45 不四舍五入 3. 无论如何,如果值像12.0,它应该只打印为 12。
条件3要始终牢记。它应该与截断逻辑同时发生。
试试这个-
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
我在使用 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
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
看看DecimalFormat()
:
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
查看java.math.BigDecimal.round(MathContext).
尝试使用DecimalFormat并设置RoundingMode以匹配您的需要。