如何在不丢失 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"
它 四舍五入 最后一位 2554
到 26
。
但我不想四舍五入这个值。分享您的想法。
您可以改用小数类型。
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
我有一个双值如下
double propertyValue = 1994.7755474452554;
当我将这个双精度值转换为字符串时
string value = propertyValue.ToString();
它给出了值"1994.77554744526"
它 四舍五入 最后一位 2554
到 26
。
但我不想四舍五入这个值。分享您的想法。
您可以改用小数类型。
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