Open main menu
首页
专栏
课程
分类
归档
Chat
Sci-Hub
谷歌学术
Libgen
GitHub镜像
登录/注册
搜索
关闭
Previous
Previous
Next
Next
你看,ChatGPT都知道优先使用BigDecimal
sockstack
/
162
/
2024-03-07 00:02:36
<p><span style="color: red; font-size: 18px">ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。</span><br><a href="https://ckai.xyz/?sockstack§ion=detail" target="__blank">https://ckai.xyz</a><br><br></p> <article class="baidu_pl"><div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css"> <div id="content_views" class="markdown_views prism-atom-one-dark"> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><p><img src="https://img-blog.csdnimg.cn/a9ef831ec4aa440babbb764e39907543.png" alt="在这里插入图片描述"></p> <blockquote> <p>不是三婶儿偏执,非要吐槽。家人们,咱就是说,按照基操逻辑谁会把严格金额计算相关的数据使用double类型呢…<br> “我以为吕布已经够勇猛了,这是谁的部下?”</p> </blockquote> <p>前几天,一同事让帮忙写段代码。内容比较常规,就是按照自定义规则自动计算出一些金额数据。楼主想着暂时也不忙,就帮着写写呗。好家伙!不写不知道,当看到他用Double类型定义存储金额时,内心瞬间沸腾了。嗯,真是个小(大)可(傻)爱(逼)…</p> <p><img src="https://img-blog.csdnimg.cn/2c7b487fcdd84b65a2319dbd719a4a32.png" alt="在这里插入图片描述"></p> <p><strong><mark>咱就是说,金额相关计算第一考虑肯定是确保精准,优选BigDecimal类型呀,Double类型很容易丢失精度的。尤其是金额,一定要严谨!</mark></strong></p> <p>你看chatgpt都知道优先使用BigDecimal。</p> <p><img src="https://img-blog.csdnimg.cn/3f773acad3eb43659b7edcc723495f0b.png" alt="在这里插入图片描述"></p> <p>果不其然,这…真是暴风雨的前奏。我发现有好几个业务模块都使用了这些金额数据做运算,多次加减乘除之类的…</p> <p>好家伙,“海燕啊,你可长点心吧!”。</p> <p><img src="https://img-blog.csdnimg.cn/b1e9afd7467f47b8b3ca245569b7e561.png" alt="在这里插入图片描述"></p> <p>那下面楼主就来详细分析一下,为什么更加建议使用BigDecimal。开整!<br> </p> <div class="toc"> <h3>文章目录</h3> <ul> <li>一、BigDecimal类型数据和Double类型</li> <li><ul> <li>1.1、BigDecimal</li> <li>1.2、Double和double的区别</li> <li><ul> <li>1.2.1、double</li> <li>1.2.2、Double</li> <li>1.2.3、double和Double之间的关系</li> </ul></li> </ul></li> <li>二、两种类型数据的适用场景、优缺点</li> <li><ul> <li>2.1、Double类型</li> <li>2.2、BigDecimal类型</li> </ul></li> <li>三、为什么不建议用Double类型计算金额</li> <li><ul> <li>3.1、Double类型计算精度易丢失</li> <li>3.2、数值过大会变为科学记数法形式</li> </ul></li> <li>四、BigDecimal常用方法</li> <li><ul> <li>4.1、BigDecimal的初始化</li> <li>4.2、BigDecimal加法</li> <li>4.3、BigDecimal减法</li> <li>4.4、BigDecimal乘法</li> <li>4.5、BigDecimal除法</li> <li>4.6、BigDecimal比较大小</li> <li>4.7、BigDecimal工具类</li> </ul></li> </ul> </div> <p></p> <h1> <a id="BigDecimalDouble_28"></a>一、BigDecimal类型数据和Double类型</h1> <p>首先,先来了解一下什么是BigDecimal、什么是Double、什么是double。以及Double和double之间有什么关系。</p> <p><img src="https://img-blog.csdnimg.cn/f03153c018cb419ea709049123cb8873.gif" alt="在这里插入图片描述"></p> <h2> <a id="11BigDecimal_33"></a>1.1、BigDecimal</h2> <p>对于什么是BigDecimal,百度百科中这样描述:</p> <blockquote> <p>Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。</p> </blockquote> <p>主要是: <strong><mark>可对超过16位有效位的数进行精确的运算。</mark></strong></p> <h2> <a id="12Doubledouble_41"></a>1.2、Double和double的区别</h2> <h3> <a id="121double_42"></a>1.2.1、double</h3> <p>八大基本数据类型之一,双精度浮点数。</p> <blockquote> <p>double(双精度浮点型)是计算机使用的一种资料型别。比起单精度浮点数(float),double(双精度浮点数)使用 64 位(8字节) 来储存一个浮点数。 它可以表示十进制的15或16位有效数字,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.797693E+308</p> </blockquote> <h3> <a id="122Double_46"></a>1.2.2、Double</h3> <p>Double是基于基本数据类型double的一个封装类,就是我们常用的java.lang.Double。</p> <p><img src="https://img-blog.csdnimg.cn/811b01361a0041f4b0f7e41d2e00dab5.png" alt="在这里插入图片描述"></p> <h3> <a id="123doubleDouble_52"></a>1.2.3、double和Double之间的关系</h3> <blockquote> <p>嗯,是有关系,但也不是情侣关系…</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/72ab8eb2a3464f1ea206bf063327af80.png" alt="在这里插入图片描述"></p> <p>从jdk1.5开始,引入了“自动装箱”、“自动拆箱”的概念,简化了基本数据类型和包装类之间的转化,提高了使用效率。</p> <p>关于什么是装箱、拆箱。举个栗子:比如我们常用的List就是一个自动装箱、拆箱的体现。</p> <p><img src="https://img-blog.csdnimg.cn/5bf86296f92a4e679a70e29f42d185f3.png" alt="在这里插入图片描述"></p> <p>如图所示,楼主定义了一个Integer类型的list。当往list中放入数据1和2时,会把int类型自动转换为Integer类型,这个过程就是自动装箱。</p> <p><img src="https://img-blog.csdnimg.cn/42af8db3590948bbb9f68a89b4610c68.png" alt="在这里插入图片描述"></p> <p>反过来说,当从list中取出数据时,会把Integer类型自动转换为int类型,这个过程就是自动拆箱。</p> <p><strong>自动装箱最大的优点就是:可以直接使用包装类中所有的方法。</strong></p> <p>我们直接调用即可,方法内部都已经帮我们处理好了。感兴趣的可以看下源码深入了解哈,这里不再过多介绍。<br> <img src="https://img-blog.csdnimg.cn/d6de17b08a324ec4968d4f194d14910a.gif" alt="在这里插入图片描述"></p> <h1> <a id="_75"></a>二、两种类型数据的适用场景、优缺点</h1> <h2> <a id="21Double_76"></a>2.1、Double类型</h2> <p>适用场景:双精度、非重要性、或“相对模糊”的数据存储。比如:百分比计算。</p> <p>缺点:数值容易丢失精度。</p> <p>优点:执行效率高。</p> <h2> <a id="22BigDecimal_82"></a>2.2、BigDecimal类型</h2> <p>适用场景:较为严谨的数值计算。比如:交易金额相关计算。</p> <p>优点:数值计算较为精准。</p> <p>缺点:较Double类型执行效率弱一些。</p> <h1> <a id="Double_91"></a>三、为什么不建议用Double类型计算金额</h1> <h2> <a id="31Double_92"></a>3.1、Double类型计算精度易丢失</h2> <p>当我们进行数值加减乘除运算时,Double类型很大程度上会产生误差。</p> <p>如下图示例,楼主定义了2个Double类型数据的加减乘除,运算结果有3个产生了误差。有误差,但是误差不大。</p> <p><img src="https://img-blog.csdnimg.cn/c9c2b52c699b48a4a57159a7a15d9453.png" alt="在这里插入图片描述"></p> <p>那么为什么会存在这个问题呢?</p> <p><strong><mark>可想而知,double类型在运算时,会先将数值转换成二进制然后再做运算。但是在转换过程中,可能会发生存储小数部分的位数不够的现象(无限循环小数),所以很大程度上可能会有非常小的误差产生</mark></strong>。</p> <p><strong>因此,不要直接使用入参double类型数值直接进行运算。可考虑使用string类型参数进行处理。</strong></p> <p><img src="https://img-blog.csdnimg.cn/3e3e9c2f7c104db3b4f821883a277d08.png" alt="在这里插入图片描述"></p> <h2> <a id="32_108"></a>3.2、数值过大会变为科学记数法形式</h2> <p>当数值过大时,会变为这种科学记数法形式。</p> <p><img src="https://img-blog.csdnimg.cn/1e76213a8820491692f1b7c246b314f5.png" alt="在这里插入图片描述"><br> 解决方案:可考虑使用BigDecimal类型进行转换。</p> <h1> <a id="BigDecimal_115"></a>四、BigDecimal常用方法</h1> <h2> <a id="41BigDecimal_116"></a>4.1、BigDecimal的初始化</h2> <p>楼主分别定义了2个不同类型的入参。</p> <p><img src="https://img-blog.csdnimg.cn/3ea4ae79ef8d4f6797230c2db9d0d3cb.png" alt="在这里插入图片描述"></p> <p>眼尖的小伙伴估计注意到了,实例化a对象时new BigDecimal(“0.12”)传入的是字符串,实例化b对象时new BigDecimal(0.12)传入的是double数值。大家觉得运行结果会一样吗?</p> <blockquote> <p>可能不一样吧…嗯,不是可能,是一定!!!</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/5d306eb44a174651a4bdb66d571c8c9b.png" alt="在这里插入图片描述"></p> <p>字符串类型的输出了“0.12”,而double数值类型的却输出了“0.11999999999999999555910790149937383830547332763671875”。</p> <p><img src="https://img-blog.csdnimg.cn/971f2fdd91d54606b2fe18f5835ec513.png" alt="在这里插入图片描述"></p> <p>这又回归到了上面说所的二进制转换存储小数部分的位数不够,造成的误差。使用double类型初始化BigDecimal对象,进行运算时可能会出现精度不准确的问题。</p> <p><img src="https://img-blog.csdnimg.cn/9328835743eb465d906aea2b2e3ecf30.png" alt="在这里插入图片描述"></p> <p><strong><mark>所以一定注意:不要使用double类型作为入参,直接去new一个BigDecimal对象!可能会有精度误差!</mark></strong></p> <blockquote> <p>那么,为什么string就可以呢?</p> </blockquote> <p>string是不可变的,定义为string之后再转换为数值肯定是固定的啊。</p> <p>底层很多实现也是这个原理。比如BigDecimal.valueOf()方法,如果输入的是double类型,实质上源码中还是先转化为了字符串。</p> <p><img src="https://img-blog.csdnimg.cn/5ae2abd4c87a4b1eb43107f3a2209930.png" alt="在这里插入图片描述"></p> <p>对于整型或保留小数位的,也有相应的处理方法。</p> <p><img src="https://img-blog.csdnimg.cn/5eebc81a05a24962926018074023788b.png" alt="在这里插入图片描述"></p> <p>方法有很多,大家想了解的可自行研究下,楼主就不再一一示例啦。</p> <p><img src="https://img-blog.csdnimg.cn/e54972c5e89e440c9e75ae837a7840ee.png" alt="在这里插入图片描述"></p> <h2> <a id="42BigDecimal_156"></a>4.2、BigDecimal加法</h2> <blockquote> <p>BigDecimal add(BigDecimal augend)</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/30ef5be45c964c528bd873526fe43d3e.png" alt="在这里插入图片描述"></p> <p>两个BigDecimal类型数据相加,方法调用、及运行效果。</p> <p><img src="https://img-blog.csdnimg.cn/9e7abf52249340d182012f06c91c14d6.png" alt="在这里插入图片描述"></p> <h2> <a id="43BigDecimal_166"></a>4.3、BigDecimal减法</h2> <blockquote> <p>BigDecimal subtract(BigDecimal subtrahend)</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/0b64693c80e744d3b2c4e0585ea1cd79.png" alt="在这里插入图片描述"><br> 两个BigDecimal类型数据相减,方法调用、及运行效果。</p> <p><img src="https://img-blog.csdnimg.cn/20d30a3c26a6437996ea57d3b5a24e10.png" alt="在这里插入图片描述"></p> <h2> <a id="44BigDecimal_174"></a>4.4、BigDecimal乘法</h2> <blockquote> <p>BigDecimal multiply(BigDecimal multiplicand)</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/59f1ef01a3504f9981527d2378848fa1.png" alt="在这里插入图片描述"></p> <p>两个BigDecimal类型数据相乘,方法调用、及运行效果。</p> <p><img src="https://img-blog.csdnimg.cn/f1844eecc8d14700a20d40ed34bf0b0f.png" alt="在这里插入图片描述"></p> <h2> <a id="45BigDecimal_184"></a>4.5、BigDecimal除法</h2> <blockquote> <p>BigDecimal divide(BigDecimal divisor)</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/26ef51ea272e463dac823b3244168464.png" alt="在这里插入图片描述"></p> <p>两个BigDecimal类型数据相除,方法调用、及运行效果。</p> <p><img src="https://img-blog.csdnimg.cn/7640f4ed9bda4ac6b982e2f3fb293b98.png" alt="在这里插入图片描述"></p> <p>哎呦,惊喜不惊喜,意外不意外?<strong><mark>相除的时候出现了无限循环小数</mark></strong>。</p> <p>因此 <strong><mark>相除的场景下尽可能设置保留小数位,可避免运算当中抛出异常</mark></strong>。</p> <p><img src="https://img-blog.csdnimg.cn/b271d1db5c4f41a088a3ab157a78e58f.png" alt="在这里插入图片描述"></p> <h2> <a id="46BigDecimal_198"></a>4.6、BigDecimal比较大小</h2> <p>楼主分别定义了2个值为“0.12”的数据a、b,以及值为“0.120”的数据c进行比较。</p> <p><img src="https://img-blog.csdnimg.cn/b4f4c88eaf434b60969b1af07113a6bf.png" alt="在这里插入图片描述"></p> <p>可以发现:<strong><mark>相同值“0.12”通过双等号对比返回的结果是false,equals对比返回的是true。而“0.12”和“0.120”实质上数值大小是一样的,但通过双等号或equals进行对比,返回均为false</mark></strong>。</p> <blockquote> <p>那么,对于BigDecimal类型如何比较大小呢?(叫我靓妹我就告诉你…)</p> </blockquote> <p><img src="https://img-blog.csdnimg.cn/968caa8ded81489299b9222476480f56.png" alt="在这里插入图片描述"></p> <p>方法就是:<strong><mark>使用compareTo方法进行比较</mark></strong></p> <p><img src="https://img-blog.csdnimg.cn/7b9cf29cd76340bea70f5214692cd72b.png" alt="在这里插入图片描述"></p> <p><strong><mark>a、b两值进行比较:a.compareTo(b) 。 结果为0表示a、b值相等。结果为-1表示a小于b。结果为1表示a大于b</mark></strong></p> <h2> <a id="47BigDecimal_215"></a>4.7、BigDecimal工具类</h2> <p>为大家附上常用的操作工具类,直接调用即可。</p> <pre><code class="prism language-java"> <span class="token keyword">package</span> <span class="token namespace">com<span class="token punctuation">.</span>wss<span class="token punctuation">.</span>demo<span class="token punctuation">.</span>cas</span><span class="token punctuation">;</span><span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>math<span class="token punctuation">.</span></span><span class="token class-name">BigDecimal</span></span><span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ArithUtil</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token keyword">int</span> <span class="token constant">DEF_DIV_SCALE</span> <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token comment">// 小数点后的保留位数</span><span class="token comment">/*** Double精确的加法运算** @param d1 被加数* @param d2 加数* @return 两个参数的和*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">BigDecimal</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">double</span> d1<span class="token punctuation">,</span> <span class="token keyword">double</span> d2<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">BigDecimal</span> value1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d1<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">BigDecimal</span> value2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d2<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> value1<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>value2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/*** Double精确的减法运算** @param d1 被减数* @param d2 减数* @return 两个参数的差*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">BigDecimal</span> <span class="token function">sub</span><span class="token punctuation">(</span><span class="token keyword">double</span> d1<span class="token punctuation">,</span> <span class="token keyword">double</span> d2<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">BigDecimal</span> value1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d1<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">BigDecimal</span> value2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d2<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> value1<span class="token punctuation">.</span><span class="token function">subtract</span><span class="token punctuation">(</span>value2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/*** Double精确的乘法运算** @param d1 被乘数* @param d2 乘数* @return 两个参数的积*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">BigDecimal</span> <span class="token function">mul</span><span class="token punctuation">(</span><span class="token keyword">double</span> d1<span class="token punctuation">,</span> <span class="token keyword">double</span> d2<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token class-name">BigDecimal</span> value1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d1<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">BigDecimal</span> value2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d2<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> value1<span class="token punctuation">.</span><span class="token function">multiply</span><span class="token punctuation">(</span>value2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/*** Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后n位, 以后的数字四舍五入** @param d1 被除数* @param d2 除数* @return 两个参数的商*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">BigDecimal</span> <span class="token function">div</span><span class="token punctuation">(</span><span class="token keyword">double</span> d1<span class="token punctuation">,</span> <span class="token keyword">double</span> d2<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">return</span> <span class="token function">div</span><span class="token punctuation">(</span>d1<span class="token punctuation">,</span> d2<span class="token punctuation">,</span> <span class="token constant">DEF_DIV_SCALE</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/*** Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后n位, 以后的数字四舍五入** @param d1 被除数* @param d2 除数* @param scale 表示需要精确到小数点的后几位* @return 两个参数的商*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">BigDecimal</span> <span class="token function">div</span><span class="token punctuation">(</span><span class="token keyword">double</span> d1<span class="token punctuation">,</span> <span class="token keyword">double</span> d2<span class="token punctuation">,</span> <span class="token keyword">int</span> scale<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">if</span> <span class="token punctuation">(</span>scale <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"参数[scale]必须是正整数或者零"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token class-name">BigDecimal</span> value1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d1<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token class-name">BigDecimal</span> value2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">(</span><span class="token class-name">Double</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>d2<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> value1<span class="token punctuation">.</span><span class="token function">divide</span><span class="token punctuation">(</span>value2<span class="token punctuation">,</span> scale<span class="token punctuation">,</span> <span class="token class-name">BigDecimal</span><span class="token punctuation">.</span><span class="token constant">ROUND_HALF_UP</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment">/*** 比较大小*/</span><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">boolean</span> <span class="token function">equalTo</span><span class="token punctuation">(</span><span class="token class-name">BigDecimal</span> b1<span class="token punctuation">,</span> <span class="token class-name">BigDecimal</span> b2<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">if</span><span class="token punctuation">(</span>b1 <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">||</span> b2 <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span><span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">return</span> <span class="token number">0</span> <span class="token operator">==</span> b1<span class="token punctuation">.</span><span class="token function">compareTo</span><span class="token punctuation">(</span>b2<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span> </code></pre> <p>嗯,今天的总结就先到这吧。散会了,别忘记给三婶儿点个赞哈~</p> <p><img src="https://img-blog.csdnimg.cn/cdd60cae03d2412cb0f32ef3944663c5.png" alt="在这里插入图片描述"></p> </div> <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-0407448025.css" rel="stylesheet"> <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-bb308a51ed.css" rel="stylesheet"> </div> <div id="treeSkill"></div> </article>
你看,ChatGPT都知道优先使用BigDecimal
作者
sockstack
许可协议
CC BY 4.0
发布于
2024-03-07
修改于
2024-12-20
上一篇:软件:常用 Linux 软件汇总,值得收藏
下一篇:举例说明Chatgpt模型训练的过程
尚未登录
登录 / 注册
文章分类
博客重构之路
5
Spring Boot简单入门
4
k8s 入门教程
0
MySQL 知识
1
NSQ 消息队列
0
ThinkPHP5 源码分析
5
使用 Docker 从零开始搭建私人代码仓库
3
日常开发汇总
4
标签列表
springboot
hyperf
swoole
webman
php
多线程
数据结构
docker
k8s
thinkphp
mysql
tailwindcss
flowbite
css
前端