<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        mysql浮點型運算誤差原因分析及解決方法

        來源:懂視網 責編:小采 時間:2020-11-09 19:57:45
        文檔

        mysql浮點型運算誤差原因分析及解決方法

        mysql浮點型運算誤差原因分析及解決方法:在進行金融財務等數值運算時,請使用decimal 類型,不要使用float和double類型!因為decimal的精度最高 如下C#代碼: float a = 0.65f; float b = 0.6f; float c = a - b; 此時c為多少? 0.05?錯誤! 此時c為0.0499999523! 為什么?
        推薦度:
        導讀mysql浮點型運算誤差原因分析及解決方法:在進行金融財務等數值運算時,請使用decimal 類型,不要使用float和double類型!因為decimal的精度最高 如下C#代碼: float a = 0.65f; float b = 0.6f; float c = a - b; 此時c為多少? 0.05?錯誤! 此時c為0.0499999523! 為什么?

        在進行金融財務等數值運算時,請使用decimal 類型,不要使用float和double類型!因為decimal的精度最高

        如下C#代碼:

        float a = 0.65f;
        float b = 0.6f;
        float c = a - b;

        此時c為多少?

        0.05?錯誤!

        此時c為0.0499999523!

        為什么?

        其根本原因是計算機所使用二進制01代碼無法準確表示某些帶小數位的十進制數據。

        下面我們來分析下:
        我們知道將一個十進制數值轉換為二進制數值,需要通過下面的計算方法:
        1. 整數部分:連續用該整數除以2,取余數,然后商再除以2,直到商等于0為止。然后把得到的各個余數按相反的順序排列。簡稱"除2取余法"。
        2. 小數部分:十進制小數轉換為二進制小數,采用"乘2取整,順序排列"法。用2乘以十進制小數,將得到的整數部分取出,再用2乘余下的小數部分,然后再將積的整數部分取出,如此進行,直到積中的小數部分為0或者達到所要求的精度為止。然后把取出的整數部分按順序排列起來,即先取出的整數部分作為二進制小數的高位,后取出的整數部分作為低位有效位。簡稱"乘2取整法"。
        3. 含有小數的十進制數轉換成二進制,整數、小數部分分別進行轉換,然后相加。

        例如:將十進制數值25.75轉換為二進制數值,步驟如下:

        25(整數部分)
        25/2=12......1
        12/2=6.......0
        6/2=3......0
        3/2=1......1
        1/2=0......1
        (25) 10=(11001) 2

        0.75(小數部分)
        0.75*2=1.5......1
        0.5*2=1......1
        (0.75) 10=(0.11) 2
        (25.75) 10=(11001) 2+(0.11) 2=(11001.11) 2

        按照上述方法,我們將0.65及0.6轉換為二進制代碼:
        (0.65)10 = (0.101001100110011001100110011001100110011......)2
        (0.6) 10 = (0.10011001100110011001100110011001100110011......)2

        后面的省略號表示已經算不完了,后面在無限重復 0011 這段二進制數值。
        文章開始部分,我們用的float類型,下面我們來看看float類型是否能存儲上面轉換出的二進制代碼。
        目前計算機上存儲浮點數值是按照IEEE(電氣和電子工程師協會)754浮點存儲格式標準來存儲的。
        IEEE單精度浮點格式共32位,包含三個構成字段:23位小數f,8位偏置指數e,1位符號s。將這些字段連續存放在一個32位字里,并對其進行編碼。其中0:22位包含23位的小數f; 23:30位包含8位指數e;第31位包含符號s。如下圖所示:

        也就是說上面將0.65及0.5轉換出的二進制代碼,我們只能存儲23位,即使數據類型為double,也只能存儲52位,這樣大家便能看出問題出現的原因了。
        截取的二進制代碼已無法正確表示0.65及0.5,根據這個二進制代碼肯定無法正確得到結果0.05。

        如何解決這個問題?知道其根本原因后,我們知道是無法從根本上解決這個問題的,但我們可以有一些曲線救國的方法,下面列舉幾個:
        1. 因為二進制數值可以準確表示整數(可以使用整數轉換為二進制方法驗證下),所以可以將小數乘以10或100等變成整數,然后做整數運算,最后再通過除以10或100等獲得結果;
        2. 通過截取結果的有效小數位數等,來取得最好的近似結果,然后在做處理。
        3. 對于可以用有限長度的二進制數值表示的十進制數值,可以使用存儲位數大于其長度的數據類型。

        解決方案正在補充中……,若各位有什么好的方法也可以提出來!
        以上解決方案需要按照使用的實際情況來決定使用哪種方法。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql浮點型運算誤差原因分析及解決方法

        mysql浮點型運算誤差原因分析及解決方法:在進行金融財務等數值運算時,請使用decimal 類型,不要使用float和double類型!因為decimal的精度最高 如下C#代碼: float a = 0.65f; float b = 0.6f; float c = a - b; 此時c為多少? 0.05?錯誤! 此時c為0.0499999523! 為什么?
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产福利在线观看永久免费| 边摸边吃奶边做爽免费视频99| aa级女人大片喷水视频免费| 亚洲成a人一区二区三区| 最好2018中文免费视频| 内射无码专区久久亚洲| 成年免费a级毛片| 亚洲精品午夜无码电影网| APP在线免费观看视频| 亚洲国产精品无码久久一区二区| 永久免费av无码网站yy| 亚洲国产精品自在线一区二区| 久久青草免费91线频观看不卡| 亚洲嫩模在线观看| 18国产精品白浆在线观看免费| 亚洲一级大黄大色毛片| 国产精品公开免费视频| g0g0人体全免费高清大胆视频| 国产v亚洲v天堂无码网站| 亚洲电影免费观看| 亚洲日韩精品国产3区| 亚洲女人被黑人巨大进入| a毛片在线免费观看| 亚洲a视频在线观看| 国产精品免费播放| 免费无码作爱视频| 99亚偷拍自图区亚洲| 国产精品免费_区二区三区观看| 国产成人无码精品久久久免费| 中文字幕亚洲色图| 国产精品极品美女免费观看| a毛看片免费观看视频| 激情内射亚洲一区二区三区爱妻| 免费无遮挡无码永久在线观看视频| 国产日韩AV免费无码一区二区三区| 久久亚洲sm情趣捆绑调教| 国产乱人免费视频| 99久9在线|免费| 二级毛片免费观看全程| 亚洲国产美女精品久久久久| 亚洲高清视频一视频二视频三|