我有这个double
价值:
var value = 52.30298270000003
当我将其转换为 时string
,它会失去其精度:
var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827
我的值的精度double
数可能会在运行时更改。如何强制该string.Format
方法使用所有精度?
我有这个double
价值:
var value = 52.30298270000003
当我将其转换为 时string
,它会失去其精度:
var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827
我的值的精度double
数可能会在运行时更改。如何强制该string.Format
方法使用所有精度?
您想使用R
格式说明符
来自MSDN
结果:可以往返到相同数字的字符串。
支持:Single、Double 和 BigInteger。
精度说明符:忽略。
更多信息:往返 ("R") 格式说明符。
String.Format("{0:R} some text...", value)
会给你
52.30298270000003 some text...
尝试这个:
var value = 52.30298270000003;
var str = string.Format("{0} some text...", value.ToString("R"));
Console.WriteLine(str); // output: 52.3029827
MSDN 文档ToString
对 Singles 和 Doubles 的使用方法有以下说明ToString("R")
:
默认情况下,返回值仅包含 7 位精度,尽管内部维护最多 9 位。如果此实例的值大于 7 位,则 ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol 而不是预期的数字。如果您需要更高的精度,请使用“G9”格式规范指定格式,它始终返回 9 位精度,或“R”,如果数字可以用该精度表示,则返回 7 位数字,如果数字只能表示,则返回 9 位数字以最高精度表示。