码迷,mamicode.com
首页 > 其他好文 > 详细

Lambda表达式mapToDouble.sum精度问题

时间:2019-06-12 12:32:11      阅读:950      评论:0      收藏:0      [点我收藏+]

标签:list   精度   ace   form   数据转换   return   static   数位   eva   

public static void main(String[] args) { List<Double> doubles = Arrays.asList(new Double(3.3), new Double(3.3), new Double(3.3)); double sum = doubles.stream().mapToDouble(Double::doubleValue).sum(); System.out.println(sum);// 9.899999999999999 System.out.println(formatDigit(sum,2));// 9.9 System.out.println(formatDigit_down(sum, 2)); // 9.89 List<Double> doubles1 = Arrays.asList(new Double(1.1), new Double(1.1), new Double(1.1)); double sum1 = doubles1.stream().mapToDouble(Double::doubleValue).sum(); System.out.println(sum1);// 3.3000000000000003 System.out.println(formatDigit(sum1,2));// 3.3 System.out.println(formatDigit_down(sum1, 2));// 3.3 } /** * 将数据转换为保留指定小数位数(0,1,2)格式的数,四舍五入 * */ public static double formatDigit(double num, int decimalPlace) { DecimalFormat fm = null; switch (decimalPlace) { case 0: fm = new DecimalFormat("##"); break; case 1: fm = new DecimalFormat("##.#"); break; case 2: fm = new DecimalFormat("##.##"); break; case 3: fm = new DecimalFormat("##.###"); break; case 4: fm = new DecimalFormat("##.####"); break; default: break; } if (fm == null) { return num; } StringBuffer sbf = new StringBuffer(); fm.format(num, sbf, new FieldPosition(java.text.NumberFormat.FRACTION_FIELD)); return Double.parseDouble(sbf.toString()); } /** * 将数据转换为保留指定小数位数(0,1,2)格式的数。向下取值:如 5.567 -> 5.56 -5.567 -> -5.56 */ public static double formatDigit_down(double num, int decimalPlace) { DecimalFormat fm = null; switch (decimalPlace) { case 0: fm = new DecimalFormat("##"); break; case 1: fm = new DecimalFormat("##.#"); break; case 2: fm = new DecimalFormat("##.##"); break; case 3: fm = new DecimalFormat("##.###"); break; case 4: fm = new DecimalFormat("##.####"); break; default: break; } if (fm == null) { return num; } StringBuffer sbf = new StringBuffer(); fm.setRoundingMode(RoundingMode.DOWN);// 向下取值设置、 fm.format(num, sbf, new FieldPosition(java.text.NumberFormat.FRACTION_FIELD)); return Double.parseDouble(sbf.toString()); }

Lambda表达式mapToDouble.sum精度问题

标签:list   精度   ace   form   数据转换   return   static   数位   eva   

原文地址:https://blog.51cto.com/12012821/2407687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!