小编And*_*sen的帖子

Double.ToString()的奇怪行为

我试图将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("#")不以完整精度返回整数部分的双精度?

c# double

3
推荐指数
1
解决办法
564
查看次数

标签 统计

c# ×1

double ×1