C# double類型變量比較分析
double類型變量
怎么比較大小
通過使用double.equals(doubale a,double b)進(jìn)行比較時,發(fā)現(xiàn)兩個數(shù)值不是相等。
圖中sum為從0加0.1累計到1,按數(shù)學(xué)計算應(yīng)該為1.0,但是在計算機(jī)中計算為0.9999999999,通過double.equals或者直接用==進(jìn)行等量判斷時,發(fā)現(xiàn)不相同。
這說明double類型不能直接進(jìn)行等量判斷,那么怎么進(jìn)行比較呢?
類型轉(zhuǎn)換為decimal
將float模型轉(zhuǎn)換成decimal可以直接進(jìn)行判斷了.
可以看出兩個值都是1,這樣就可以直接進(jìn)行比較了。
綜上所述,在進(jìn)行數(shù)值比較時,如果使用double類型時,不能直接進(jìn)行等量判斷,需要通過兩值相減小于某個定義的值如0.0000001來判斷兩值相等或者轉(zhuǎn)換為其他類型進(jìn)行判斷。
補充知識:c#中Double類型的使用場景
【Double】
double類型在程序中定義變量會經(jīng)常使用,如果使用不當(dāng),會導(dǎo)致實際值精度問題出現(xiàn),例子如下:
Double d1 = 66.09; Double d2 = 89.943; Double d3 = 156.033; d2 = d1 + d2; //兩個double 類型相加的結(jié)果是:156.03300000000002 Console.WriteLine(d2.CompareTo(d3)); //導(dǎo)致最終的結(jié)果是d2的值大于d3的值,但是實際看到的值是相等的 Console.ReadLine();
【解決方案】
使用Decimal類型定義后保證小數(shù)的精確度,兩個相同類型的decimal相加后可以確保程序不會自動添加進(jìn)度到結(jié)果值中,這樣就能夠避免出現(xiàn)以上情況發(fā)生
Decimal d1 = 66.09M; Decimal d2 = 89.943M; Decimal d3 = 156.033M; d2 = d1 + d2; Console.WriteLine(d2.CompareTo(d3)); Console.ReadLine();
以上這篇C# double類型變量比較分析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out
這篇文章主要介紹了一看就懂:圖解C#中的值類型、引用類型、棧、堆、ref、out,本文用淺顯易懂的語言組織介紹了這些容易混淆的概念,需要的朋友可以參考下2015-06-06C# Winform使用log4net進(jìn)行日志記錄
Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標(biāo),下面我們就來學(xué)習(xí)一下如何使用log4net進(jìn)行日志記錄吧2023-11-11C#用Topshelf創(chuàng)建Windows服務(wù)的步驟分享
這篇文章主要給大家介紹了關(guān)于C#如何利用Topshelf創(chuàng)建Windows服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05C#?守護(hù)進(jìn)程的介紹及實現(xiàn)詳解
本文主要介紹了C#?守護(hù)進(jìn)程的介紹及實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06