[英]Floating point numbers C#
我認為以這種格式聲明和初始化浮點數是合法和傳統的:
float someVariable = 12.502D; (or M, F does not give a compiler error).
但是我收到編譯器錯誤:
double類型的文字不能隱式轉換為'float'類型; 使用'F'后綴來創建此類型的文字。
C#中有三種浮點數,對吧?
為了修復編譯器錯誤,我明確地使用了賦值語句:
float SomeVariable = (float) 12.525D;
在這種情況下我做對了嗎? 什么是傳統或正確的方法來聲明和初始化由Double或Decimal值組成的浮點變量?
在更簡潔的英語中,編譯器為文本字符串12.502假定的默認類型是double。 雙倍是浮子大小的兩倍,就像一個誇脫不能放入一個品脫,雙倍不能存儲在浮子中,除非你做一個演員,這可能會失去精度。
您可以通過添加F或f后綴來告訴編譯器12.502實際上是一個浮點數,如下所示:
float someVariable = 12.502f;
要么:
double someVariable = 12.502;
你為什么不用:
float someVariable = 12.502f;
要么
double someVariable = 12.502; //floating point literals are by default doubles
float
是單精度浮點運算,在C#中無法隱式轉換為double
。 在C#中,每個可能丟失一些信息的演員都不能隱含。 float
有32位來存儲浮動精度的組件。 double
有64位。
float
可以取值從1.5 × 10^-45
到3.4 × 10^38
double
可以取值從5.0 × 10^-324
到1.7 × 10^308
所以你可以看到雙打可以存儲更大范圍的值。 因此,如果您從double
轉換為float
,則可能會丟失信息。
如果你寫float SomeVariable = (float) 12.525D;
,然后十進制數字首先轉換為double,然后轉換為float。 在極少數情況下,根據數字,此雙舍入會略微改變值。
用F后綴寫數字可以避免這種情況。
(如果數字在某種意義上是均勻分布的,那么在2 30中大約會發生一次,因為浮點有效數中的位數少於雙有效數字中的29位。當原始數字以雙精度對齊時,問題就會發生浮點舍入的中間點[在2 29中一次 ],但如果直接倒圓到浮點數,則會從另一個方向向上舍入,從中間點四舍五入到[一次為二]。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.