C#将20位精度双精度转换为字符串,然后再次返回

在C#中。我有一个双数字(我从数据库中提取),具有20位精度。在Visual Studio(使用QuickWatch)中,我可以看到double的值为= 0.00034101243963859839。

我想在一个文本框中显示这个值,然后当我把它取出并将其转换成一个double时,它是相同的值。但我总是丢掉最后两位数字

我试过以下:

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”numeric format string

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

R代表“往返”。从链接的文件:

This format is supported only for the Single and Double types. The round-trip specifier guarantees that a numeric value converted to a string will be parsed back into the same numeric value.

除此之外,我怀疑没有办法保留最后两位数字。只有这么精确的可用性,我怀疑他们首先将它变成d。但是您可以确保您的字符串至少读取您所做的正确。

如果您真的需要额外的精度,可以尝试使用十进制代替。

http://stackoverflow.com/questions/611552/c-sharp-converting-20-digit-precision-double-to-string-and-back-again

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C#将20位精度双精度转换为字符串,然后再次返回