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> </p>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/lymblog/p/18933294
頁:
[1]