我想在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));
在这里,我们使用十进制格式化程序进行格式化。舍入模式设置为 DOWN,因此它不会自动舍入小数位。
预期结果是:
12.49
12.45
12
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
我在使用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
DecimalFormat()
:
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
检查java.math.BigDecimal.round(MathContext).
尝试使用十进制格式并设置舍入模式以匹配您的需要。