如何在不丢失 C# 中的数据的情况下将双精度值转换为字符串

How to convert the double value to string without losing the data in c#

我有一个双值如下

double propertyValue = 1994.7755474452554;

当我将这个双精度值转换为字符串时

string value = propertyValue.ToString();

它给出了值"1994.77554744526"

四舍五入 最后一位 255426

但我不想四舍五入这个值。分享您的想法。

您可以改用小数类型。

decimal propertyValue = 1994.7755474452554M;

默认情况下,Double returns 15 位精度的 .ToString() 方法。如果你想要 double 值内部保存的完整 17 位数字,你需要将 "G17" 格式说明符传递给方法。

String s = value.ToString("G17");

这将防止在转换为字符串时对双精度值进行舍入。

value = propertyValue.ToString("G17");

无法重现不当行为;您已经体验过一种表现效果:它是 ToString() 像那样放置 double

  string source = "1994.7755474452554";

  double d = double.Parse(source, CultureInfo.InvariantCulture);

  string test = d.ToString("R", CultureInfo.InvariantCulture);

  Console.Write(source.Equals(test) ? "OK" : "Rounded !!!");

结果是 OK。请注意 "R" 格式字符串:

The Round-trip ("R") Format Specifier

https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx#RFormatString

您可以将 double 转换为 decimal 并使用默认值 ToString(),如下所示:

Double propertyValue = 1994.77554744526;
var str = ((decimal)propertyValue).ToString();
//str will hold 1994.77554744526