gpt4 book ai didi

c# - Double.ToString() 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 14:56:23 24 4
gpt4 key购买 nike

我正在尝试将 double 值 9007199254740992.0 转换为字符串。

但是好像有一个舍入错误(最后的2变成了0):

(9007199254740992.0).ToString("#")    // Returns "9007199254740990"
(9007199254740992.0).ToString() // Returns"9.00719925474099E+15"

首先我认为这个数字可能不能表示为 double 。但它可以。这可以通过将其转换为 long 然后将其转换为字符串来看出。

((long)9007199254740991.0).ToString() // Returns "9007199254740991"
((long)9007199254740992.0).ToString() // Returns "9007199254740992"

此外,我发现如果我使用 "R" format , 它有效。

(9007199254740992.0).ToString("R")    // Returns "9007199254740992"

谁能解释为什么 ToString("#") 没有以全精度返回带有整数部分的 double 值?

最佳答案

MSDN上可以看出:

By default, the return value only contains 15 digits of precision although a maximum of 17 digits is maintained internally. If the value of this instance has greater than 15 digits, ToString returns PositiveInfinitySymbol or NegativeInfinitySymbol instead of the expected number. If you require more precision, specify format with the "G17" format specification, which always returns 17 digits of precision, or "R", which returns 15 digits if the number can be represented with that precision or 17 digits if the number can only be represented with maximum precision.

关于c# - Double.ToString() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23040710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com