有关JAVA BigDecimal的使用

告别‘抓瞎’:CANoe的Trace、Graphics和Logging窗口实战技巧,高效分析总线故障 本文深入解析CANoe的Trace、Graphics和Logging窗口实战技巧,帮助工程师高效分析总线故障。通过智能过滤、可视化监控和智能日志管理,构建系统级问题定位工作流,显著提升车载网络故障排查效率。 阅读详情

先看段官方文档

[java]  view plain copy
  1. /*The results of thisconstructor can be somewhat unpredictable. One might assume that  
  2. new BigDecimal(.1) is exactlyequal to .1, but it is actually equal  
  3. to.1000000000000000055511151231257827021181583404541015625. This is so because.1  
  4. cannot be represented exactlyas a double (or, for that matter, as a binary fraction  
  5. of any finite length). Thus,the long value that is being passed in to the constructor  
  6. is not exactly equal to .1,appearances nonwithstanding. 
  7. The (String) constructor, onthe other hand, is perfectly predictable: new BigDecimal 
  8. (".1") is exactlyequal to .1, as one would expect. Therefore, it is generally  
  9. recommended that the (String)constructor be used in preference to this one.*/   


 

也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。

               

[java]  view plain copy
  1. BigDecimal b = newBigDecimal("0.3");  //BigDecimal b = new BigDecimal(0.3);      
  2.                System.out.println(b.multiply(BigDecimal.valueOf(100)));  
  3.                System.out.println(b.floatValue()*100);  
  4.                System.out.println(b.multiply(BigDecimal.valueOf(100)).setScale(0,BigDecimal.ROUND_HALF_UP));  

 

关于setScale函数的:

setScale(1)表示保留以为小数,默认用四舍五入方式

setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3

setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4

setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

setScaler(1,BigDecimal.ROUND_HALF_DOWN)五舍六入,2.35变成2.3,2.36变成2.40 如果是5则向下舍

关于类型转换:

BigDecimal类提供了诸如intValue(),floatValue(), doubleValue(), longValue()方法来将BigDecimal对象转换成对应的值

还提供了valueOf() 来将float,double类型转换为BigDecimal

 

网上总结:

1、此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 无法准确地表示为double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。

2、另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个BigDecimal,它正好等于预期的 0.1。因此,比较而言,通常建议优先使用 String 构造方法。

3、当 double 必须用作BigDecimal 的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用 Double.toString(double) 方法,然后使用BigDecimal(String) 构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double) 方法

NCCL 核心集体通信操作深度解析:从原理到优化实践 操作逻辑:若 N 个 GPU 各持有一段数据(大小为 S),通信后每个 GPU 会持有所有 N 段数据(总大小为 N×S)。典型场景:多卡推理结果聚合、模型并行中间结果同步。操作逻辑:N 个 GPU 各持有数据,通过归约(求和、取平均等)运算后,所有 GPU 获得相同结果。典型场景:数据并行训练的梯度聚合(如 SGD 优化器)。操作逻辑:N 个 GPU 各持有 N 份数据分片,通信后每个 GPU 获得所有 GPU 的对应分片。典型场景。 阅读详情

相关推荐

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 742

java.math.BigDecimal简介

在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。

棒棒糖的糖不含糖的博客 1860

保姆级教程:在Windows上用Docker Desktop一键部署Dify 1.0.1(附国内镜像加速)

本文提供在Windows系统上使用Docker Desktop快速部署Dify 1.0.1的详细教程,包括环境准备、国内镜像加速配置、Dify容器部署实战及常见问题解决方案。特别针对国内用户优化,确保快速完成部署并提升开发效率。

weixin_33738555的博客 282

BigDecimal相关计算

创建BigDecimal这个对象正确方式应该为: new BigDecimal(“7900”) 错误示范: new BigDecimal(7900) 除法使用,需要指明保留位数,单单只指明这个,默认是去掉小数点之后的数字 错误示范: new BigDecimal(“7900”).divide(new BigDecimal(“80000”), 4) 正确应为:指明进位方式 new BigDecimal(“7900”).divide(new BigDecimal(“80000”), 4,BigDecimal.R

weixin_47785112的博客 203

Linux与Windows双系统,安装完linux后无法通过grub进入Windows的解决方法

先装Windows 10,Windows可正常启动,再装Kali,Kali提示装grub后照装。然而装完后重启发现无Windows选项。

sakurashockwave的博客 6454

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

BigDecimal的使用及精度丢失

在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。6.2、工具类推荐/*** 用于高精确处理常用的数学运算。

qq_42600094的博客 5748

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

BigDecimal用法

BigDecimal基本用法:   import java.math.BigDecimal; /** * Created by gailun on 2018/7/12. */ public class Demo1 { public static void main(String[] args) { BigDecimal bigDecimal = new BigD...

mry6的博客 652

ROS 2在自动驾驶中的应用:感知节点开发

ROS 2在自动驾驶中的应用:感知节点开发 ,人工智能,计算机视觉,大模型,AI,本文围绕ROS 2在自动驾驶感知节点开发展开,介绍了ROS 2基础、感知节点开发流程,包括环境搭建、代码编写等,还阐述了常用传感器感知节点开发、多传感器融合,以及测试调试、性能优化、部署集成等内容,分析了开发面临的挑战与未来趋势,为相关开发提供了全面指导,涉及简单代码示例和概念解释。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 130

BigDecimal可能遇到的坑

BigDecimal可能遇到的坑前言浮点数运算浮点数比较最后 前言 在计算机中数值的计算无法避免,由于日常的算术运算和计算机的计算并不等同,计算机是以二进制的形式存储数值,且计算机中二进制的位数有限,对于二进制中的“无限小数”便存在精度损失。如十进制的0.1转换为二进制为0.0 0011 0011 0011...(无数个0011),如果使用double储存再转换十进制就是0.1000000000000000055511151231。 简而言之,计算机无法准确表达所有的浮点数,在重要的业务场景中需要考虑精度损

坐于屋顶望月球 797

【项目实战】DevOps制品管理之JFrog Artifactory介绍

JFrog Artifactory是一款领先的二进制软件制品仓库管理工具,由JFrog公司开发。

奶爸的编程之路,也就一周冷个三天 1356

java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题

BigDecimal概述 二、BigDecimal常用构造方法 三、BigDecimal常用方法 四、BigDecimal进阶 BigDecimal的八种舍入模式 BigDecimal格式化、小数点转换 货币格式化与百分比格式化 五、BigDecimal常见问题 踩坑一:创建 BigDecimal精度丢失的坑 踩坑二:等值比较的坑 踩坑三:无限精度的坑 踩坑四:BigDecimal三种字符串输出的坑 踩坑五:使用BigDecimal进行计算时参数不能为NULL 踩坑六:使用BigDecimal进行除法计算时

weixin_49114503的博客 5万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java bigdecimal取值_Java中BigDecimal类的使用详解

不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方...

weixin_35755562的博客 1791

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java bigdecimal_Java BigDecimal详解

1.引言float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。先看下面代码public static void main(String[] args){S...

weixin_33901449的博客 4358

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java保留2位小数及BigDecimal使用,bigdecimal

java保留2位小数及BigDecimal使用 2017年11月17日 13:07:04 擅长发呆 阅读数:30405 java保留两位小数的方法 import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberFormatDem...

f45056231p的博客 3万+

Java中BigDecimal的使用

在日常开发中我们经常会碰到小数计算,而小数直接计算的话会出现一些小小的错误,如下 System.out.println(1.01 + 2.02); 你说能输出什么?3.03?实际上输出的是3.0300000000000002。这是因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。有没有不失精度的办法呢?这里就要用到BigDecimal了

cen_s的博客 9万+

Java BigDecimal的使用

BigDecimal加减乘除 BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.pr...

xiangwang2016的博客 3万+

Java BigDecimal是什么,怎么用

一、BigDecimal是什么? 1、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的

weixin_48027611的博客 2975

Java中BigDecimal总结

1.BigDecimal是什么 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是

weixin_43564783的博客 1132

java bigdecimal 初始化_java中的BigDecimal详解及使用

1 BigDecimal简介BigDecimal是由任意精度的整数非标度值和32位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行...

weixin_29986051的博客 2324

java中BigDecimal类的使用

在Java的各种机试题中,经常会出现一些计算,这些计算的结果和运算数可能会超过内置数据类型的大小。这个时候就需要使用BigDecimal类,它可以进行大数的运算;1、BigDecimal类的初始化有两种方法初始化,一种是使用double类型,一种是使用String类型BigDecimal aDouble =new BigDecimal(1.22); System.out.println("cons...

Gensoukyo 8883

java bigdecimal赋值_Java中BigDecimal类介绍及用法

Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.float和Dou...

weixin_39911998的博客 1万+

【Java】BigDecimal类的使用

BigDecimal类的使用

SlKiYn的博客 1844

java bigdecimal最大值_Java BigDecimal详解

引言float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。先看下面代码public static voidmain(String[] args){Syst...

weixin_29056701的博客 9372
上一篇: Linux的五个查找命令:find,locate,whereis,which,type
下一篇: Http学习之使用HttpURLConnection发送post和get请求
luckarecs
博客等级 码龄17年 118粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值