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

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

以下是我的要求: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 
 double d = ; 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 

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

看看DecimalFormat()

 DecimalFormat df = new DecimalFormat("#.##"); DecimalFormatSymbols dfs = new DecimalFormatSymbols(); dfs.setDecimalSeparator(','); df.setDecimalFormatSymbols(dfs); 

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