痤疮就是螨性皮炎蒲兴旺 發表於 2025-6-17 17:11:00

BigDecimal类型转换成Integer类型

<p>在 Java 里,若要把<code>BigDecimal</code>类型转换为<code>Integer</code>类型,可借助<code>intValue()</code>或者<code>intValueExact()</code>方法。下面为你介绍这两种方法的具体使用以及它们之间的差异。</p>
<h3 class="header-OdWb_u auto-hide-last-sibling-br">1. 采用<code>intValue()</code>方法(不进行溢出检查)</h3>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">这种方法会把<code>BigDecimal</code>转换为<code>int</code>基本类型,要是<code>BigDecimal</code>超出了<code>int</code>的范围,就会对结果进行截断处理。</div>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.math.BigDecimal;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> BigDecimalToIntegerExample {
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> main(String[] args) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 示例1:数值在int范围内</span>
      BigDecimal bd1 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("12345"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">int</span> intValue1 =<span style="color: rgba(0, 0, 0, 1)"> bd1.intValue();
      Integer integer1 </span>=<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(intValue1);
      System.out.println(</span>"转换结果1: " + integer1); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: 12345

      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 示例2:数值超出int范围(会进行截断)</span>
      BigDecimal bd2 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("2147483648"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 比Integer.MAX_VALUE大1</span>
      <span style="color: rgba(0, 0, 255, 1)">int</span> intValue2 = bd2.intValue(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 截断后会得到一个负数</span>
      Integer integer2 =<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(intValue2);
      System.out.println(</span>"转换结果2: " + integer2); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: -2147483648</span>
<span style="color: rgba(0, 0, 0, 1)">    }
}</span></pre>
</div>
<h3 class="header-OdWb_u auto-hide-last-sibling-br">2. 使用<code>intValueExact()</code>方法(进行溢出检查)</h3>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">该方法在<code>BigDecimal</code>的值超出<code>int</code>范围时,会抛出<code>ArithmeticException</code>异常。</div>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.math.BigDecimal;
</span><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> java.math.ArithmeticException;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> BigDecimalToIntegerExactExample {
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> main(String[] args) {
      </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 示例1:数值在int范围内</span>
            BigDecimal bd1 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("12345"<span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">int</span> intValue1 =<span style="color: rgba(0, 0, 0, 1)"> bd1.intValueExact();
            Integer integer1 </span>=<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(intValue1);
            System.out.println(</span>"转换结果1: " + integer1); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: 12345

            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 示例2:数值超出int范围(会抛出异常)</span>
            BigDecimal bd2 = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("2147483648"<span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 0, 255, 1)">int</span> intValue2 = bd2.intValueExact(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里会抛出ArithmeticException</span>
            Integer integer2 =<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(intValue2);
            System.out.println(</span>"转换结果2: " +<span style="color: rgba(0, 0, 0, 1)"> integer2);
      } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (ArithmeticException e) {
            System.out.println(</span>"错误: " + e.getMessage()); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: 错误: Overflow</span>
<span style="color: rgba(0, 0, 0, 1)">      }
    }
}</span></pre>
</div>
<h3 class="header-OdWb_u auto-hide-last-sibling-br">方法选择建议</h3>
<ul class="auto-hide-last-sibling-br">
<li><code>intValue()</code>:若你能确定<code>BigDecimal</code>的值处于<code>int</code>范围之内,或者在超出范围时你希望进行截断处理,就可以使用此方法。</li>
<li><code>intValueExact()</code>:若你需要确保转换过程中不会出现溢出情况,一旦发生溢出就进行错误处理,那么建议使用该方法。</li>
</ul>
<h3 class="header-OdWb_u auto-hide-last-sibling-br">自动装箱说明</h3>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">在上述示例中,我们先把<code>BigDecimal</code>转换为<code>int</code>基本类型,再通过<code>Integer.valueOf(int)</code>将其转换为<code>Integer</code>对象。其实也可以利用 Java 的自动装箱机制,直接把<code>int</code>赋值给<code>Integer</code>,例如:</div>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">
<div class="cnblogs_code">
<pre>Integer integer = bd.intValue(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自动装箱</span></pre>
</div>
<h3 class="header-OdWb_u auto-hide-last-sibling-br">处理小数部分</h3>
<div class="auto-hide-last-sibling-br paragraph-Oc488D paragraph-element br-paragraph-space">要是<code>BigDecimal</code>包含小数部分,上述两种方法都会直接舍弃小数部分(并非四舍五入)。例如:</div>
</div>
</div>
<div class="cnblogs_code">
<pre>BigDecimal bd = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("12.9"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">int</span> result = bd.intValue(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 结果为12</span></pre>
</div>
<p>如果你需要进行四舍五入,可以先使用<code>setScale()</code>方法进行处理:</p>
<div class="cnblogs_code">
<pre>BigDecimal bd = <span style="color: rgba(0, 0, 255, 1)">new</span> BigDecimal("12.9"<span style="color: rgba(0, 0, 0, 1)">);
BigDecimal rounded </span>= bd.setScale(0, BigDecimal.ROUND_HALF_UP); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 四舍五入为13</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> result = rounded.intValueExact(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 结果为13</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div><br><br>
来源:https://www.cnblogs.com/lymblog/p/18933294
頁: [1]
查看完整版本: BigDecimal类型转换成Integer类型