如何将double值转换为字符串而不会丢失c#

时间:2017-02-07 07:11:47

标签: c# type-conversion tostring

我有一个双值,如下所示

double propertyValue = 1994.7755474452554;

当我将此双精度值转换为字符串

string value = propertyValue.ToString();

它给出了值"1994.77554744526"

已将四舍五入最后一位数字2554改为26

但我不想围绕价值。分享您的想法。

4 个答案:

答案 0 :(得分:3)

默认情况下,Double的.ToString()方法返回15位精度。如果你想要内部双值保存的完整17位数,你需要通过" G17"方法的格式说明符。

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

这将防止在转换为字符串时舍入double值。

value = propertyValue.ToString("G17");

答案 1 :(得分:1)

您可以使用小数类型。

decimal propertyValue = 1994.7755474452554M;

答案 2 :(得分:1)

无法重现不当行为;您已经体验过代表效果:它<input type="text" name="text1" id="text1" value="" onblur="evalthevalue(this.value, 'text2')" /> <input type="text" name="text2" id="text2" value="" /> <script type="text/javascript"> function evalthevalue(inputVal, idToReplace) { console.log('inputVal'+inputVal); console.log('idToReplace'+idToReplace); console.log('eval'+eval(inputVal.trim())); document.getElementById(idToReplace).value = eval(inputVal.trim()); } </script> 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格式字符串:

  

往返(&#34; R&#34;)格式说明符

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

答案 3 :(得分:0)

您可以将double投射到decimal并使用默认的ToString(),如下所示:

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