在C#中。我有一个 double 数(我从数据库中提取了它),精度为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

I want to be able to do the following:

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代表“往返”。从链接的文档中:



顺便说一句,我怀疑没有办法保留最后两位数字。可用的精度如此之高,我怀疑他们是否曾一度将其放入d中。但是您可以确保您的字符串至少能正确读回您所拥有的内容。

如果您确实需要更高的精度,则可以尝试使用decimal代替。

关于c# - C#将20位精度 double 转换为字符串并再次返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/611552/

10-14 14:50