国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java.lang.NumberFormatException: Infinite or NaN原因

Lavender / 1264人閱讀

摘要:概念補充在中進行數字類型運算的時,之前一直有一種錯誤的觀念,即進行除法運算時當除數為時在運行時會拋出運行時異常。負無窮,負數除以零得到負無窮。非數字,除以時得到非數字。撥云見日探究清楚之后,一切都是那樣的理所應當。

背景

在對Double類型的數據進行計算操作,將結果轉化為BigDecimal時拋出了下面的異常,進行了Debug才發現了問題原因,同時也暴露出了自己在一些基礎知識上還有些欠缺。

Exception in thread "main" java.lang.NumberFormatException: Infinite or NaN
    at java.math.BigDecimal.(BigDecimal.java:895)
    at java.math.BigDecimal.(BigDecimal.java:872)
    at com.lingyejun.authenticator.DoubleTest.main(DoubleTest.java:13)
概念補充

在java中進行數字類型運算的時,之前一直有一種錯誤的觀念,即進行除法運算時當除數為0時在運行時會拋出java.lang.ArithmeticException: / by zero運行時異常。如此想當然的以為對于浮點類型如Float和Double也是如此,下面一段代碼便可以說明問題。

package com.lingyejun.authenticator;

public class DoubleTest {

    public static void main(String[] args) {
        Double d1 = 10 / 0D;
        Double d2 = -10 / 0D;
        Double d3 = 0.0 / 0D;
        System.out.println("d1=" + d1 + " d2=" + d2 + " d3=" + d3);
    }
}

運算結果為“d1=Infinity d2=-Infinity d3=NaN”,什么?數字運算居然還能算出來了字符串???打印出來的Infinity、-Infinit、NaN其實不是字符串,而是double類型的常量,查看源碼注釋便懂了。

/**
 * A constant holding the positive infinity of type
 * {@code double}. It is equal to the value returned by
 * {@code Double.longBitsToDouble(0x7ff0000000000000L)}.
 */
public static final double POSITIVE_INFINITY = 1.0 / 0.0;

/**
 * A constant holding the negative infinity of type
 * {@code double}. It is equal to the value returned by
 * {@code Double.longBitsToDouble(0xfff0000000000000L)}.
 */
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;

/**
 * A constant holding a Not-a-Number (NaN) value of type
 * {@code double}. It is equivalent to the value returned by
 * {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
 */
public static final double NaN = 0.0d / 0.0;

正無窮:POSITIVE_INFINITY,正數除以零得到正無窮。

負無窮:NEGATIVE_INFINITY,負數除以零得到負無窮。

非數字:NaN,0除以0時得到非數字。 

異常原因  

通過查看BigDecimal類中針對Double類型數據的構造方法,我們知道了,在構造BigDecimal對象時,構造方法中傳入的Double類型為無窮大或非數字時會拋出NumberFormatException異常。

public BigDecimal(double val, MathContext mc) {
        if (Double.isInfinite(val) || Double.isNaN(val))
            throw new NumberFormatException("Infinite or NaN");

撥云見日探究清楚之后,一切都是那樣的理所應當。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77907.html

相關文章

  • java.lang.NumberFormatException: Infinite or NaN原因

    摘要:概念補充在中進行數字類型運算的時,之前一直有一種錯誤的觀念,即進行除法運算時當除數為時在運行時會拋出運行時異常。負無窮,負數除以零得到負無窮。非數字,除以時得到非數字。撥云見日探究清楚之后,一切都是那樣的理所應當。 背景 在對Double類型的數據進行計算操作,將結果轉化為BigDecimal時拋出了下面的異常,進行了Debug才發現了問題原因,同時也暴露出了自己在一些基礎知識上還有些...

    GeekGhc 評論0 收藏0
  • Java 異常處理的 9 個最佳實踐

    摘要:異常處理的個最佳實踐原文地址翻譯出處在中,異常處理是個很麻煩的事情。使用描述性消息拋出異常這個最佳實踐背后的想法與前兩個類似。當你以錯誤的格式提供時,它將被類的構造函數拋出。類提供了特殊的構造函數方法,它接受一個作為參數。 Java 異常處理的 9 個最佳實踐 原文地址:https://dzone.com/articles/9-...翻譯出處:https://www.oschina.n...

    sihai 評論0 收藏0
  • 崩潰bug日志總結2

    摘要:出現錯誤引發崩潰日志的流程分析這個錯誤是應用的方法總數限制造成的。 目錄介紹 1.1 java.lang.ClassNotFoundException類找不到異常 1.2 java.util.concurrent.TimeoutException連接超時崩潰 1.3 java.lang.NumberFormatException格式轉化錯誤 1.4 java.lang.Illegal...

    sutaking 評論0 收藏0
  • mybatis參數格式化異常:NumberFormatException: For input st

    摘要:此類問題,在配置中,做的比較好,所以,官方也不是很放心其注解,建議使用。錯誤的引起,是和引起的,原因給的是字符串,卻拿一個數字比較,會做一些轉化,結果在數字格式化時發生異常。 使用mybatis注解開發的時候,總會遇到很多問題,但是mybatis的注解并不是那么的美好,一些問題或者錯誤根本不能給出準確的定位,有時候,甚至會給出Unknow Source的錯誤,獲取就是一個關閉標簽沒有關...

    aaron 評論0 收藏0
  • Android實際開發bug大總結

    摘要:換句話說,環境或應用程序沒有處于請求操作的適當狀態。項目中異常分析引發崩潰日志的流程分析解決辦法常見的出現場景狀態異常非法線程操作。導致的方法出來顯示消息位于該消息之后,遲遲沒有執行。這時候,的超時檢測結束,刪除了服務中的記錄。 目錄介紹 1.1 java.lang.UnsatisfiedLinkError找不到so庫異常 1.2 java.lang.IllegalStateExce...

    peixn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<