我想在java中截断一个float和一个double值。
以下是我的要求: 1.如果我有12.49688f,它应打印为12.49而不会四舍五入 2.如果它是12.456的双倍,它应打印为12.45而不会四舍五入 3.在任何情况下,如果值类似于12.0,则应仅打印为12。
要始终牢记条件3.它应该与截断逻辑并发。
答案 0 :(得分:22)
试试这个 -
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
答案 1 :(得分: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
答案 2 :(得分:3)
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
答案 3 :(得分:1)
检查java.math.BigDecimal.round(MathContext).
答案 4 :(得分:1)
查看DecimalFormat()
:
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
答案 5 :(得分:0)
尝试使用DecimalFormat并设置RoundingMode以匹配您需要的内容。