当前位置: 首页 > wzjs >正文

做设计任务的网站北京建设工程公司

做设计任务的网站,北京建设工程公司,wordpress 角色等级,网站集约化建设工作总结目录 数据精度问题BigDecimal的正确使用构造陷阱数值比较除法舍入控制 RoundingMode 数据精度问题 Java开发中,Double类作为包装类用于处理双精度浮点数。浮点数double无法精确表示某些十进制小数(如0.1),导致运算结果出现误差 …

目录

  • 数据精度问题
  • BigDecimal的正确使用
    • 构造陷阱
    • 数值比较
    • 除法
    • 舍入控制 `RoundingMode`

数据精度问题

Java开发中,Double类作为包装类用于处理双精度浮点数。浮点数double无法精确表示某些十进制小数(如0.1),导致运算结果出现误差

double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 输出 0.30000000000000004,而非0.3

需要精确计算的场景需要使用:BigDecimal,并通过字符串构造避免初始精度丢失。

BigDecimal d1 = new BigDecimal("0.1");
BigDecimal d2 = new BigDecimal("0.2");
System.out.println(d1.add(d2)); // 0.3

Double 比较推荐使用 Double.compare(a, b)

double a = 0.1;
double b = 0.1;
System.out.println(a == b); // trueDouble aD = 0.1;
Double bD = 0.1;
System.out.println(aD == bD); // false
System.out.println(Double.compare(aD, bD) == 0); // true

BigDecimal的正确使用

对于需要精确计算的场景,使用BigDecimal

构造陷阱

避免用double构造BigDecimal,否则传入的是不精确的二进制值。

double v = 0.946; 
System.out.println(v); // 输出正确,0.946
// 直接转 BigDecimal,实际内部值是不精确的二进制值,导致截取3位小数结果错误
double vv = new BigDecimal(v).setScale(3, RoundingMode.DOWN).doubleValue();
System.out.println(vv); // 输出错误值 0.945

正确做法:BigDecimal(字符串构造)

double vvv = new BigDecimal(String.valueOf(v)).setScale(3, RoundingMode.DOWN).doubleValue();
System.out.println(vvv); // 输出正确,0.946

数值比较

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("1");
System.out.println(a.compareTo(b) == 0); // true,数值相等

除法

必须指定舍入模式和精度,处理无限小数

BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
// 指定保留4位小数,四舍五入
BigDecimal result = a.divide(b, 4, RoundingMode.HALF_UP); // 3.3333

不处理无限小数会抛出异常 ArithmeticException

BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("3");
a.divide(b); // 抛出 ArithmeticException

舍入控制 RoundingMode

RoundingMode.UP 远离零方向舍入 2.53, -2.5-3
RoundingMode.DOWN 向零方向舍入 2.52, -2.5-2
RoundingMode.CEILING 向正无穷方向舍入 2.53, -2.5-2
RoundingMode.FLOOR 向负无穷方向舍入 2.52, -2.5-3
RoundingMode.HALF_UP 四舍五入(常用) 2.53, 2.42
RoundingMode.HALF_DOWN 五舍六入 2.52, 2.63

示例

// 测试数值
BigDecimal number = new BigDecimal("2.55");
String label = "正数 2.55";
int newScale = 1;System.out.println("--- 测试数值: " + label + " ---");// UP:远离零方向舍入
System.out.println("UP          : " + number.setScale(newScale, RoundingMode.UP));// DOWN:向零方向舍入
System.out.println("DOWN        : " + number.setScale(newScale, RoundingMode.DOWN));// CEILING:向正无穷方向舍入
System.out.println("CEILING     : " + number.setScale(newScale, RoundingMode.CEILING));// FLOOR:向负无穷方向舍入
System.out.println("FLOOR       : " + number.setScale(newScale, RoundingMode.FLOOR));// HALF_UP:四舍五入
System.out.println("HALF_UP     : " + number.setScale(newScale, RoundingMode.HALF_UP));// HALF_DOWN:五舍六入
System.out.println("HALF_DOWN   : " + number.setScale(newScale, RoundingMode.HALF_DOWN));

结果展示,

--- 测试数值: 正数 2.55 ---
UP          : 2.6
DOWN        : 2.5
CEILING     : 2.6
FLOOR       : 2.5
HALF_UP     : 2.6
HALF_DOWN   : 2.5

负数注意 UP 和 CEILING,DOWN 和 FLOOR 的区别。

  • UP 是远离零方向(对负数是“向下舍入”,绝对值更大)。
  • CEILING 向正无穷方向(即对负数是“向上舍入”,更接近零),类似于数学中向上取整。
--- 测试数值: 负数 2.55 ---
UP          : -2.6
DOWN        : -2.5
CEILING     : -2.5
FLOOR       : -2.6
HALF_UP     : -2.6
HALF_DOWN   : -2.5

文章转载自:

http://8ybhak8z.LhxkL.cn
http://mGgNOcv0.LhxkL.cn
http://4FJkMMIW.LhxkL.cn
http://1UKGLQuf.LhxkL.cn
http://nele5z2Z.LhxkL.cn
http://FDglCoko.LhxkL.cn
http://6DuCWG1C.LhxkL.cn
http://SyppDT59.LhxkL.cn
http://h1bXmRf8.LhxkL.cn
http://j2Rqr6Un.LhxkL.cn
http://1heJ5qCB.LhxkL.cn
http://ULsZ9N3l.LhxkL.cn
http://u8Z8EdC2.LhxkL.cn
http://SwEw0VKo.LhxkL.cn
http://q0yLPeR0.LhxkL.cn
http://TyhWBOwZ.LhxkL.cn
http://YJTm7SNy.LhxkL.cn
http://u2ymofMc.LhxkL.cn
http://X3TqjfwA.LhxkL.cn
http://7ka7F0A3.LhxkL.cn
http://NZm2HHKO.LhxkL.cn
http://v9fjpCIh.LhxkL.cn
http://EckMKuPz.LhxkL.cn
http://ARx6NFtK.LhxkL.cn
http://tK0KzoHB.LhxkL.cn
http://KLspaHn8.LhxkL.cn
http://39ipPFsV.LhxkL.cn
http://WLgMtmbl.LhxkL.cn
http://OLjLSDiF.LhxkL.cn
http://agtkBPOR.LhxkL.cn
http://www.dtcms.com/wzjs/779016.html

相关文章:

  • asp网站开发技术总结与收获社区电商网站设计
  • 广州专业建设网站传奇网页版在线玩
  • 10个零网站建设网站建设信息平台
  • 自己做的电影网站打开很慢哈尔滨市建设工程交易
  • 网站com域名上不去cn能常德农科院网站
  • WordPress国外打赏杨和关键词优化
  • 网站建设基本完成百度收录提交接口
  • 做招聘网站用哪个cms推广一手渠道
  • 宿州网站建设优化企业网站代运营
  • 上海网站搜索优化湖南网站设计企业
  • 焦作商城网站建设电商网站适合做响应式布局吗
  • 南平网站开发公司网站建设思路方案
  • 网站建设开发的规划流程网站建设工作总结6
  • wordpress本地网站打开慢seo网站推广怎么做
  • 学习html5的网站网站建设预算计算方法
  • 做购物网站的目的免费网址注册平台
  • 自己搭服务器 做购物网站成本不要域名做网站
  • 网站设计广州量计价格管理培训机构
  • 珠海网站建设费用注册城乡规划师考试时间
  • 采购网站官网用什么网站做框架图
  • 北京商场购物卡优化技术服务
  • 自建网站软件网站建设制作品牌公司
  • 网站推广运作怎么做直播网站功能怎么做
  • 仲恺企业网站建设大专网页设计工资怎么样
  • 如何做好网站seoo2o网站运维建设方案
  • 福田区做网站公司太原网站建设价格低
  • 晋江做网站的公司哪家好wordpress 获取链接地址
  • 南通物流网站建设高权重网站做员会来顶排名
  • 企业网站建设不要空间可以吗什么网站可以做试题
  • 网站开发外包合同河南最新消息