我有double
值:
var value = 52.30298270000003
当我将其转换为string
时,会失去精度:
var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827
我的double
值上的精度的数量可能会在运行时更改。如何强制string.Format
方法使用所有精度?
答案 0 :(得分:6)
您想使用R
格式说明符
来自MSDN
结果:一个可以往返于相同数字的字符串。
支持者:Single,Double和BigInteger。
精确说明符:忽略。
String.Format("{0:R} some text...", value)
会给你
52.30298270000003 some text...
答案 1 :(得分:3)
试试这个:
var value = 52.30298270000003;
var str = string.Format("{0} some text...", value.ToString("R"));
Console.WriteLine(str); // output: 52.3029827
关于单身和双打的ToString
方法并使用ToString("R")
,MSDN documnetation有以下说法:
默认情况下,返回值仅包含7位精度 虽然内部最多保留9位数字。如果值 此实例的大小超过7位,ToString(String)返回 PositiveInfinitySymbol或NegativeInfinitySymbol而不是 预期数量。如果需要更高的精度,请指定格式 “G9”格式规范,总是返回9位数 精度,或“R”,如果数字可以返回7位数 以精度表示,如果数字只能是9位数 用最大精度表示。