在java中截断浮点数和双精度数

时间:2012-04-26 11:33:33

标签: java floating-point double truncate

我想在java中截断一个float和一个double值。

以下是我的要求:  1.如果我有12.49688f,它应打印为12.49而不会四舍五入  2.如果它是12.456的双倍,它应打印为12.45而不会四舍五入  3.在任何情况下,如果值类似于12.0,则应仅打印为12。

要始终牢记条件3.它应该与截断逻辑并发。

6 个答案:

答案 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以匹配您需要的内容。