欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

關(guān)于C#數(shù)強(qiáng)轉(zhuǎn)會不會拋出異常詳解

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

前言

在編程的過程中我們都知道有些錯誤是難以避免的,為了避免錯誤所帶來的程序不友好所以程序當(dāng)中引入了異常處理機(jī)制,又因?yàn)閿?shù)據(jù)類型奇多和處理方式不同,應(yīng)要求又有了數(shù)據(jù)轉(zhuǎn)換的機(jī)制。

最近遇到一個小伙伴問我,從一個很大的數(shù)強(qiáng)轉(zhuǎn),會不會拋出異常。實(shí)際上不會出現(xiàn)異常。

最簡單的代碼是使用一個比 maxvalue 大的數(shù),然后用它強(qiáng)轉(zhuǎn)

   long tathkDucmmsc = int.MaxValue ;
   tathkDucmmsc *= 2;
   int kuplStqfbbmx = (int) tathkDucmmsc; // -2

結(jié)果沒有異常,只是拿到的值是 -2

但是因?yàn)槟J(rèn)是 unchecked 如果把上面的代碼添加checked,那么就會出異常

   checked
   {
    long tathkDucmmsc = int.MaxValue;
    tathkDucmmsc *= 2;
    int kuplStqfbbmx = (int) tathkDucmmsc;
   }
System.OverflowException:“Arithmetic operation resulted in an overflow.”

但是對于 float ,他的值就不是這樣了

   checked
   {
    double hcmzgSsby = float.MaxValue;
    hcmzgSsby *= 2;
    float djmmmkvawSswu = (float)hcmzgSsby;
   } 

可以看到 djmmmkvawSswu 的值是 Infinity 不會出現(xiàn)異常,所以對于浮點(diǎn)數(shù)不要通過異常來判斷強(qiáng)轉(zhuǎn)是不是超過最大值。

那么如何判斷 Infinity ? 使用float.IsInfinity或 double.IsInfinity 都可以判斷。

C#中的Infinity有個小坑

我們知道,在C#中主要有如下幾種數(shù)值類型:int、long、decimal、float和double。對于前三種,如果除零,那么會提示表達(dá)式錯誤(直接書寫數(shù)字)或報(bào)DivideByZeroException異常(使用變量);對于后面兩種,除零會得到正負(fù)無窮大,除非你是0.0/0.0那么會得到NaN(非數(shù)字)。大部分參考資料都是這樣告訴大家的。

最近,之前的代碼出現(xiàn)一個bug,老是出現(xiàn)Infinity,然后排查了所有除法表達(dá)式,問題都無法解決。跟蹤出現(xiàn)Infinity之前的變量值,發(fā)現(xiàn)“1E+300 * 1E+10”的乘法,遂仔細(xì)研究代碼邏輯,發(fā)現(xiàn)某些變量(double類型)被重復(fù)相乘越來越大,乃至變成了無窮大。才意識到不僅除零會出現(xiàn)無窮大,大數(shù)相乘也會出現(xiàn)無窮大。大家以后小心。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。

上一篇:WPF如何自定義TabControl控件樣式示例詳解

欄    目:C#教程

下一篇:C#中comboBox實(shí)現(xiàn)三級聯(lián)動

本文標(biāo)題:關(guān)于C#數(shù)強(qiáng)轉(zhuǎn)會不會拋出異常詳解

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5202.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有