1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          forinputstring(解決Java運行時錯誤For input string-問題[親測有效])

          來源:互聯網轉載 時間:2024-01-25 11:33:06

          解決Java運行時錯誤For input string:問題[親測有效]-forinputstring異常怎么解決

          解決Java運行時錯誤For input string:問題[親測有效]其實問題都比較簡單,只要你多花點功夫去研究原理。你發現其實都差不多的。沒有什么東西是很難的

          背景

          今天前端聯調的一個小伙伴說一個接口報錯了。

          我初略看了下代碼,發現沒有什么問題。

          先貼下報錯的地方的代碼

          ...IntegralRecord integralRecord = new IntegralRecord();integralRecord.setUid(uid);integralRecord.setLinkType(IntegralRecordConstants.TYPE_SIGN);integralRecord.setTitle(IntegralRecordConstants.INTEGRAL_TASK);integralRecord.setIntegral(Integer.parseInt(amount));integralRecord.setStatus(1);integralRecord.setType(IntegralRecordConstants.TYPE_ADD); integralRecord.setMark(StrUtil.format("完成任務贈送{}積分", amount));userIntegralRecordService.save(integralRecord);...

          是否還在為Ide開發工具頻繁失效而煩惱,來吧關注以下公眾號獲取最新激活方式。親測可用!

          為防止網絡爬蟲,請關注公眾號回復”口令”

          激活idea 激活CLion DataGrip DataSpell dotCover dotMemory dotTrace GoLand PhpStorm PyCharm ReSharper ReShaC++ Rider RubyMine WebStorm 全家桶 刷新

          【正版授權,激活自己賬號】:Jetbrains全家桶Ide使用,1年售后保障,每天僅需1毛

          【官方授權 正版激活】:官方授權 正版激活 自己使用,支持Jetbrains家族下所有IDE…

          問題定位

          沒辦法,只能debugger一行行去跑了。

          在跑到

          integralRecord.setIntegral(Integer.parseInt(amount));

          這行的話,然后報了For input string的錯誤信息。

          這行代碼,我看了下,只是對類型做了一下轉換操作。

          難道是傳過來的數據有問題?

          再跑一次,發現amount=2.00

          說明:因為amount涉及了多個地方共用,考慮到可能會存在小數的情況,在前端傳遞的時候就使用了String,后端根據實際情況使用對應的類型進行轉換。

          轉換的時候,確實是這行出了問題。

          具體的測試情況如下所示:

          然后我們改成

          amount=”2″

          結果如下

          那么問題就可以定義了,是因為轉換的時候,Integer無法識別帶小數的情況。

          問題跟進

          Integer.parseInt源碼初探

          我們發現,parseInt最后調用了下面的代碼。

          public static int parseInt(String s, int radix) throws NumberFormatException{        if (s == null) {            throw new NumberFormatException("null");        }        if (radix < Character.MIN_RADIX) {            throw new NumberFormatException("radix " + radix +                                            " less than Character.MIN_RADIX");        }        if (radix > Character.MAX_RADIX) {            throw new NumberFormatException("radix " + radix +                                            " greater than Character.MAX_RADIX");        }        boolean negative = false;        int i = 0, len = s.length();        int limit = -Integer.MAX_VALUE;        if (len > 0) {            char firstChar = s.charAt(0);            if (firstChar < '0') { // Possible leading "+" or "-"                if (firstChar == '-') {                    negative = true;                    limit = Integer.MIN_VALUE;                } else if (firstChar != '+') {                    throw NumberFormatException.forInputString(s);                }                if (len == 1) { // Cannot have lone "+" or "-"                    throw NumberFormatException.forInputString(s);                }                i++;            }            int multmin = limit / radix;            int result = 0;            while (i < len) {                int digit = Character.digit(s.charAt(i++), radix);                if (digit < 0 || result < multmin) {                    throw NumberFormatException.forInputString(s);                }                result *= radix;                if (result < limit + digit) {                    throw NumberFormatException.forInputString(s);                }                result -= digit;            }            return negative ? result : -result;        } else {            throw NumberFormatException.forInputString(s);        }    }

          源碼定位

          在代碼中我們可以看到如果不再指定范圍內就會報錯

          int digit = Character.digit(s.charAt(i++), radix);  if (digit < 0 || result < multmin) {    throw NumberFormatException.forInputString(s);}

          java.lang.Character.digit(char ch, int radix)方法 :

          在指定的基數返回字符ch的數值,如果基數是不在范圍內MIN_RADIX≤基數≤MAX_RADIX或如果該值的通道是不是一個有效的數字在指定的基數-1,則返回。

          radix的值是10,這個是因為轉換Int類型的是時候,單個字符0~9。

          所以如果值不是0~9之間的數字就會報錯。

          拋出的異常就是forInputString。

          解決方案

          字符串截取

          這個示例中,已經很明確的知道了只需要整數部分,那么可以根據指定字符”.”進行截取。

          然后轉換之后就可以了。

          借用第三方

          這里推薦使用下hutool這個工具包里面的NumberUtil

          可以直接將類似的都進行轉換。

          方法:NumberUtil.parseInt

           String val ="2.00"; int i = NumberUtil.parseInt(val);

          類型轉換

          因為可以判定,值一定是數值類型的。

          所以可以直接轉換為BigDecimal類型。

          BigDecimal有個intValue方法,直接轉換后調用即可

           String val ="2.00"; int i = new BigDecimal(val).intValue();

          總結

          其實問題都比較簡單,只要你多花點功夫去研究原理。你發現其實都差不多的。沒有什么東西是很難的

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          興業轉債,正股興業銀行,公司主要從事商業銀行業務。主要產品包括企業金融業務、零售銀行業務和金融市場業務。興業轉債什么時候上市?興業轉債轉股好嗎?興業轉債能掙多少錢?一起來看看吧!興業轉債什么時候上市?據興業銀行發布的公開發行A股可轉換公司債券上市公告書顯示,該行可轉換公司債券“興業轉債”將于1月14日上市??赊D債存續日期為2021年12月27日至2027年12月26日,轉股...

          說到《哈利·波特》中伏地魔的扮演者,我相信你第一個想到的是拉爾夫·費因斯。但除了這位英國男神,還有三位年輕演員分別扮演了童年版和少年版的伏地魔(小湯姆·里德爾)。正是他們的精彩表演,讓我們有機會在大銀幕上見證黑魔王年輕時的故事。雖然英雄費因斯-提芬、弗蘭克·蒂爾內和克里斯蒂安·庫爾森在這個系列中的戲份很少,但他們仍然給我們留下了深刻的印象。完成《哈利波特》這部作品后,這三位年輕演員現在發展如何?1...

          房地產股票有哪些?房地產股票有綠地控股、順發恒業、蘇寧環球、世聯行、泰禾集團、中交地產、中國武夷、國興地產、津濱發展、嘉凱城、福星股份、天?;?、銀億股份等。房地產股票指的是房地產開發商或者公司發給股東當作入股憑證并以此獲得股息的一類有價證券。它代表著股東對企業或公司的財產權利。其發行方式一般是由房地產開發機構通過銀行進行金融性的發行。例中國第一家發行房地產股票的上海興業房產股份有限公司,便是委托...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>