我试图将double值9007199254740992.0转换为字符串.
但似乎存在舍入错误(最后2个变为0):
(9007199254740992.0).ToString("#") // Returns "9007199254740990"
(9007199254740992.0).ToString() // Returns"9.00719925474099E+15"
Run Code Online (Sandbox Code Playgroud)
首先,我认为这个数字可能无法表示为双数.但它可以.这可以通过将其转换为long然后将其转换为字符串来看出.
((long)9007199254740991.0).ToString() // Returns "9007199254740991"
((long)9007199254740992.0).ToString() // Returns "9007199254740992"
Run Code Online (Sandbox Code Playgroud)
另外,我发现如果我使用"R"格式,它可以工作.
(9007199254740992.0).ToString("R") // Returns "9007199254740992"
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么ToString("#")不以完整精度返回整数部分的双精度?