簡體   English   中英

以2位精度存儲雙精度

[英]Storing a double with 2 digit precision

如何將雙精度轉換為2位精度?

例如:

    double x = 1.00d;           
    Console.WriteLine(Math.Round(x,2,MidpointRounding.AwayFromZero));
//Should output 1.00 for me, but it outputs just 1.

我正在尋找的是將1.00存儲在一個雙變量中,當打印到控制台打印1.00時。

謝謝,-Mike

“x”存儲數字 - 它不注重精度。

要將數字作為具有特定精度的字符串輸出,請使用格式說明符 ,即:

Console.WriteLine(x.ToString("F2"));

double是IEEE-754雙精度浮點數。 它總是具有正好53位的精度。 它不具有可以在“小數位”精確表示的精度 - 正如短語暗示的那樣,“小數位”僅測量相對於基數為10的數字系統的精度。

如果你想要的只是改變顯示值的精度,那么你可以使用其中一個ToString()重載來做到這一點,這里的其他答案指出。

還要記住, double連續實值的近似值; 也就是說,沒有隱含離散量化的值(盡管這些值實際上被量化為53位)。 如果您要表示的是離散值,則存在隱式量化(例如,如果您使用的是貨幣值,其中0.1和0.099999999999999之間存在顯着差異)那么您應該使用數據類型它基於整數語義 - 使用縮放整數的定點表示或類似.NET decimal類型的定義。

這不是存儲問題,而是格式化問題。

此代碼生成1.00

double x = 1.00d;
Console.WriteLine("{0:0.00}", Math.Round(x, 2, MidpointRounding.AwayFromZero));

decimal數據類型具有可變精度的概念。 雙數據類型沒有。 它的精度始終為53位。

double的默認字符串表示形式略微0.999999999999以最小化奇怪的值,如0.999999999999 ,然后刪除任何尾隨零。 正如其他答案所述,您可以使用類型的ToString重載之一來更改該行為。

暫無
暫無

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

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