首页 > 其他分享 >mapToDouble.sum的精度丢失问题

mapToDouble.sum的精度丢失问题

时间:2023-02-20 23:34:29浏览次数:42  
标签:四舍五入 format sum RoundingMode 丢失 decimalFormat mapToDouble 负数 DecimalFormat


需要四舍五入一下

package cn.***;

import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
* 小数位获取
*/
public class DecimalAcquisition {

public static void main(String[] args) {

/** 常量:测试取精度 */
double pai = 3.141592657589;

/** 常量:测试四舍五入 */
double num = 3.555555555555;

/**
* 第一种方案
* 保留两位小数,四舍五入
*/
DecimalFormat b = new DecimalFormat("#.00");

// 两位精度处理测试
String s = b.format(pai);
System.out.println(s); // 3.14

// 是否四舍五入测试
String s1 = b.format(num);
System.out.println(s1); // 3.56


/**
* 第二种方案(全面,可配置)
* 保留两位小数,四舍五入
* 通过setMaximumFractionDigits设置具体的几进位。
* 通过setRoundingMode设置进位机制{
* RoundingMode.HALF_UP 四舍五入,负数先取绝对值再四舍五入再负数
* RoundingMode.CEILINGZ 取右边最近的整数
* RoundingMode.DOWN 去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整
* RoundingMode.FLOOR 取左边最近的正数
* RoundingMode.HALF_DOWN 五舍六入,负数先取绝对值再五舍六入再负数
* RoundingMode.HALF_EVEN 整数位若是奇数则四舍五入,若是偶数则五舍六入
* }
*/
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(2); // 保留两位小数
decimalFormat.setRoundingMode(RoundingMode.HALF_UP); // 设置具体的进位机制
Double aDouble = Double.valueOf(decimalFormat.format(pai));
Double aDouble1 = Double.valueOf(decimalFormat.format(num));
System.out.println(aDouble); // 3.14
System.out.println(aDouble1); // 3.56

}
}


标签:四舍五入,format,sum,RoundingMode,丢失,decimalFormat,mapToDouble,负数,DecimalFormat
From: https://blog.51cto.com/u_15973676/6074516

相关文章