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

double浮点数计算的一些问题,以及bigDecimal的使用,和DecimalFormat的对比、Long

文章目录

    • 考考你
      • System.out.println(1/5); 输出结果是多少?
      • System.out.println(null-0.0); 输出结果是多少?
    • double部分
      • double 计算如果一个空null,会报错吗?
      • double类型将分母置1
    • BigDecimal部分
      • 为什么要用BigDecimal
      • 格式化小数位数
      • BigDecimal的非空非0判断
      • 字符串转换为BigDecimal
    • DecimalFormat的例子
    • bigdecimal工具类
        • bigdecimal工具类-判断是否为空或0
      • DecimalFormat为什么不能格式化字符串
    • 答案部分
    • 其他
      • new BigDecimal(null)报空指针异常
      • 入参中如何判断BigDecimal是否为空
      • BeanUtils属性复制不能将Double复制到BigDecimal
      • BigDecimal add之后值不变
      • 小数点后保留位数
        • RoundingMode选哪个
      • 双精度和单精度的对比
        • 单精度最高可以表示几位有效小数
    • 容易出错的地方
    • Long
        • Long值比较时用什么呢?

考考你

先来几道简单的题目。

System.out.println(1/5); 输出结果是多少?

题目1答案

System.out.println(null-0.0); 输出结果是多少?

题目2答案

double部分

double 计算如果一个空null,会报错吗?

Doubled1=0.0;Doubled2=1.0;Doubleresult=d1-d2;

实测报错。 所以double类型计算之前,要进行非空校验。
这里要注意的是, 如果不set null,初始化的值是0.0,是不报错的。

double类型将分母置1

因为如果是分母是0.0,那么结果会为Infinity。
所以最好置为其他值。

Doubled1=0.0;Doubled2=1.0;Doubleresult=d1/(d2!=0?d2:1.0);

BigDecimal部分

为什么要用BigDecimal

java中浮点数计算不是很精准,BigDecimal可以很好的解决这个题目。

格式化小数位数

BigDecimal对这个的支持还是很好的。 例如,设置为6位小数。

privateBigDecimalamount;this.amount=newBigDecimal(0.0).setScale(6,BigDecimal.ROUND_HALF_UP);

BigDecimal的非空非0判断

实际当中,有很多需要判断BidDecimal不为空且不为0。
那么怎么写呢?

错误代码:

if(null!=amount&&!amount.equals(newBigDecimal(0))){}

这段代码乍看没问题,甚至测试的时候也没问题,但是实际是有问题的。
为什么呢,因为equals比的时候会考虑到scale。 如果传入的参数设置了scale,结果可能会不一致。

举例如下:

System.out.println(newBigDecimal(0).equals(newBigDecimal(0.0).setScale(2,BigDecimal.ROUND_HALF_UP)));// 返回 false

所以,应该用compareTo来比较。正确代码:

// bigDecimal不为空且不为0publicstaticbooleanisNotNullAndNotZero(BigDecimalbigDecimal){booleanflag=false;if(null!=bigDecimal&&0!=newBigDecimal<
http://www.jsqmd.com/news/1249164/

相关文章:

  • 2026年实测:宁波4大周末语文小升初机构综合评测
  • Tiva™ TM4C129 EPI配置寄存器深度解析:从通用模式到主机总线时序优化
  • 2026扬州卫生间渗水发霉最全解答!不砸砖防水靠谱吗?根治楼下渗水方法 - 宅安选房屋修缮
  • Elastic 与 Deductive AI 携手合作,加速工程团队的 agent 式事件调查
  • 杭州方品科技深耕互联网技术赛道为产业数字化发展注入全新动能 - 资讯纵览
  • mvc 默认路由没有生效_许迎果 第172期 蜗牛星际U盘安装openwrt软路由全流程演示...
  • 向量数据库实战:选型、调优与落地~系列文章16:Milvus 分布式部署实战
  • C/C++输入输出深度解析:从缓冲区到文件操作,掌握I/O核心机制
  • 制造业中小工厂CRM选型指南与实施策略
  • 【毕业设计】基于 Django 的校园学生综合素质考核与评优系统 学生德育智育文体综合评分管理平台(源码+文档+远程调试,全bao定制等)
  • 深度解析TM4C129LNCZAD:从数据手册修订看工业MCU实战应用
  • AI招聘解决方案:重构招聘价值链的16项核心技术
  • TM4C129 μDMA实战:从原理到配置,解放CPU的数据搬运引擎
  • 深圳读书会私域管理软件选型指南:聚焦功能适配与实施边界
  • 2026青岛排气扇厂家哪家好,换气扇厂家推荐避坑指南:4个挑选要点,帮你绕开90%的坑 - mobible
  • 工业厂房机电装修工程怎么选?哪家靠谱服务水平更稳定 - 品牌深度评测
  • ARM DAP与JTAG指令深度解析:从调试原理到故障排查实战
  • TM4C129 UART寄存器深度解析:从波特率计算到DMA配置实战
  • JTAG接口原理与实战:从状态机到ARM Cortex-M调试全解析
  • Tiva™ TM4C129LNCZAD EEPROM与Flash硬件保护机制详解与实战
  • 2026 年 7 月完整版萧邦售后维修点大全,覆盖国内各大城市网点 - 萧邦官方维修中心
  • openwrt ipv6设置_软路由 篇一:3865U软路由折腾记—物理直装OpenWrt图文教程
  • 外贸独立站投流服务:从精准获客到询盘增长的完整增长体系
  • ARM Cortex-M4F核心寄存器与内存模型详解:中断控制与原子操作实践
  • 从小白开始在X96 MAX +盒子中安装armbian(ubuntu桌面版)提成千兆并且传输到EMMC
  • 生命涌现的小龙虾技能之【Micro-Expression Recognition Analysis Tool | 微观情绪识别分析工具】简介
  • 佛山土壤检测单位(理化 + 肥力 + 8 项重金属 + 土壤检测指南) - 第三方检测机构
  • 因果AI核心技术解析与应用实践
  • 2026廊坊热水器维修公司排名|电热水器燃气热水器专业上门维修平台推荐 - 家修助手
  • C++课程设计实战:面向对象与文件操作构建仓库管理系统