当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C#将20位精度双精度转换为字符串并再次返回》经验,为你挑选了1个好方法。

在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
}

有没有办法保持最后两位精度?



1> Joel Coehoor..:

使用"R" 数字格式字符串:

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

R代表"往返".从链接文档:

仅对Single和Double类型支持此格式.往返说明符保证转换为字符串的数值将被解析回相同的数值.

顺便说一句,我怀疑没有办法保留最后两位数字.只有那么多的精确度,我怀疑它们是否首先进入d了它.但是你可以确保你的字符串至少读回你正确的内容.

如果您确实需要额外的精度,可以尝试使用decimal替代精度.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有