簡體   English   中英

C# float 到 double 的轉換

[英]C# float to double conversion

當我執行以下除法並轉換為浮動時,我得到以下值:

float fltval = (float)(1183588296 / 65536.0);   //18060.125

在沒有強制轉換的情況下執行相同的除法會得到以下雙精度值:

double dblval = 1183588296 / 65536.0;   //18060.124145507813

我可以為給定的浮點值找到最接近的雙精度值嗎?

當我執行以下操作時:

double nearestdbl = (double)fltval;

我得到浮點值本身而不是最接近的雙精度值:

//nearestdbl = 18060.125

在這種情況下,如何獲得更准確的值 (18060.124145507813) 或更接近的值?

我希望能夠將結果存儲在 32 位(浮點數)中,並且仍然能夠通過將浮點值分配給 double 變量來推導出更接近的 double 值。

但是,以下代碼給出了更准確的 double 值:

float f = 125.32f;  //125.32
double d = (double)125.32f; //125.31999969482422

為什么它在第二個示例中而不是在第一個示例中找到更接近的值?

謝謝。

(實際上,當我運行代碼時,我得到的是18060.13而不是18060.125 ,但我會在我的回答中繼續使用后者。)

我可以為給定的浮點值找到最接近的雙精度值嗎?

您似乎以某種方式認為浮點數18060.125的最近雙精度18060.12518060.124145507813 這不是真的。 浮點數18060.125最接近的雙精度18060.12518060.125 這個值可以用doublefloat同樣准確地表示。

為什么將18060.124145507813float會得到18060.125呢?

由於最近的floatdouble 18060.12414550781318060.125 請注意,這與您的理解相反。 這並不意味着最接近float 18060.125 double float 18060.12518060.124145507813 ,因為在兩個相鄰的float之間有許多double float

不可能回到“您從中獲得floatdouble ”,因為當您轉換為float ,您正在丟失信息。 您正在從 64 位值轉換為 32 位值。 那些信息不會回來。

為什么鑄造 125.32f 工作呢?

因為float不能像double那樣准確地表示數字 125.32,所以當你轉換為 double 時,它​​會試圖進一步接近它。 盡管看起來float可以准確地表示125.32 100%,但這只是ToString方法造成的錯覺。 始終使用某種格式化方法格式化您的浮點數,例如string.Format

轉換數據類型時,您總是會得到精度較低的類型......考慮將 int 轉換為 double 的情況

int intVal = (int)(10.0/4);
double dblVal = 10.0/4;
//dblVal = 2.5 --- intVal = 2
dblVal = intVal;
//dblVal = 2.00;

底線:您不能同時節省內存和精度...

將 double 轉換為 float 時,double 值將四舍五入為最接近的 float 值。 如果 double 值太小或太大而無法放入 float 類型,則結果為零或無窮大。 查看此鏈接: https : //docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/numeric-conversions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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