在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设置为与您需要的匹配。