gpt4 book ai didi

c++ - 如何在 C++ 中重新建立 double

转载 作者:行者123 更新时间:2023-11-27 23:09:35 26 4
gpt4 key购买 nike

当表示double 数时,它的精度在某种程度上被破坏了。例如,数字 37.3 可以表示为 37.29999999999991。

我需要重新建立损坏的 double 号码(我的项目需要这样做)。一种方法是将 double 转换为 CString

double d = 37.3;
CString str;
str.Format("%.10f", d);

Output: str = 37.3;

通过这种方式我可以重建损坏的d。但是,我找到了一个反例。如果我设置

d = 37.3500;

那么它的 double 表示有时等于 37.349998474121094。当将d转换为CString时,输出仍然是37.3499984741,实际上并不等于37.3500。

为什么转换 37.3500 没有给出想要的答案,而 37.3 给出了?有没有办法重新建立double?

谢谢。

最佳答案

Why converting 37.3500 didn't give desired answer, while 37.3 gave?

偶然。 37.3 的表示恰好足够接近,四舍五入到小数点后 10 位给出了预期的结果,而 37.3499984741 则没有。

Is there any ways to reestablish double?

不可以,信息一旦丢失,就无法恢复。如果您需要十进制数的精确表示,那么您将需要一种不同于二进制 float 的格式。 C++ 语言或标准库中没有合适的 decimal 类型;根据您的需要,您可以考虑使用 Boost.Multiprecision 等库或 GMP .或者,如果您可以限制所需的小数位数,则可以将所有数字乘以该比例并使用精确的整数。

关于c++ - 如何在 C++ 中重新建立 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091380/

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