簡體   English   中英

C# 將 20 位精度 double 轉換為字符串並再次返回

[英]C# Converting 20 digit precision double to string and back again

在 C# 中。 我有一個具有 20 位精度的雙精度數(我從數據庫中提取的)。 在 Visual Studio(使用 QuickWatch)中,我可以看到雙精度值 = 0.00034101243963859839。

我想在文本框中顯示這個值,然后當我把它拿出來並將它轉換回雙精度值時讓它成為相同的值。 但我總是輸掉最后兩位數字

我嘗試了以下方法:

double d = 0.00034101243963859839;
string s = d.ToString();
string s2 = d.ToString("F20");
string s3 = d.ToString("0.00000000000000000000"); -- 20 0's
string s4 = (d*100d).ToString();

在這些情況下:

s  = 0.000341012439638598
s2 = 0.00034101243963859800
s3 = 0.00034101243963859800
s4 = 0.0341012439638598

我希望能夠做到以下幾點:

double d = 0.00034101243963859839;
string s = d.ToString();
//...
double d2 = double.Parse(s);
if(d == d2)
{
  //-- Success
}

有沒有辦法保持最后兩位精度?

使用“R”數字格式字符串

double d = 0.00034101243963859839;
string s = d.ToString("R");
//...
double d2 = double.Parse(s);
if(d == d2)
{
  //-- Success
}

R代表“往返”。 從鏈接的文檔:

僅 Single 和 Double 類型支持此格式。 往返說明符保證轉換為字符串的數值將被解析回相同的數值。

順便說一句,我懷疑沒有辦法保留最后兩位數。 可用的精度只有這么多,我懷疑他們是否會一開始就將其變為d 但是您可以確保您的字符串至少可以正確讀取您所擁有的內容。

如果您真的需要額外的精度,您可以嘗試使用decimal

不可以。除了 double 是二進制的因此不適合十進制值這一事實之外,double 最多有 15/16 個十進制數字(53 位)。 十進制最多有 28/29 位(96 位),所以可以使用它。 如果您在數據庫中有更高的精度,您需要一個自己的 bignum class 用於 C#,查看 stackoverflow 的實現。

暫無
暫無

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

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