3

我有这个double价值:

var value = 52.30298270000003

当我将其转换为 时string,它会失去其精度

var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827

我的值的精度double数可能会在运行时更改。如何强制该string.Format方法使用所有精度

4

2 回答 2

6

您想使用R格式说明符

来自MSDN

结果:可以往返到相同数字的字符串。

支持:Single、Double 和 BigInteger。

精度说明符:忽略。

更多信息:往返 ("R") 格式说明符

String.Format("{0:R} some text...", value)

会给你

52.30298270000003 some text...
于 2013-05-09T13:43:10.757 回答
3

尝试这个:

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 位数字以最高精度表示。

于 2013-05-09T13:43:48.327 回答