簡體   English   中英

浮點數C#

[英]Floating point numbers C#

我認為以這種格式聲明和初始化浮點數是合法和傳統的:

float someVariable = 12.502D;  (or M, F does not give a compiler error).

但是我收到編譯器錯誤:

double類型的文字不能隱式轉換為'float'類型; 使用'F'后綴來創建此類型的文字。

C#中有三種浮點數,對吧?

  1. 浮點數為F或f。 (7位有效數字)
  2. D或d代表Double。 (15或16位有效數字)
  3. M或m表示十進制。 (28或29位有效數字)

為了修復編譯器錯誤,我明確地使用了賦值語句:

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^-453.4 × 10^38

double可以取值從5.0 × 10^-3241.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM