gpt4 book ai didi

c++ - 如何在 C++ 中将字符串的确切内容分配给 double

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:45 25 4
gpt4 key购买 nike

我对 C++ 没有太多经验,我有以下问题。使用以下代码:

double d = 0.0000000;
stringstream ss;
ss << std::fixed << std::setprecision( 2 ) << d;
ss >> d;

std::string content = ss.str();
d = atof( content.c_str() );

在 MS Visual Studio 中调试时的两种方式中的任何一种,我都看到 d 的值是 0.0000000 而不是 0.00,如字符串 content

如何获取分配给双 d 的字符串的确切内容?

也许我应该问一个更广泛的问题:

我正在编写一个方法,根据需要返回精度为 double 的值。例如,如果我有 2.446343434 作为 d 的值并且精度为 2,我怎样才能让我的方法将 d 返回为 2.45?

阅读以下答案后:我开始知道不可能做这样的事情。所以下一个问题是:

即使我上面的代码试图将 2.45 放入 double,C++ 运行时也会将零(多少?)附加到 2.45 并正确返回?有没有办法控制向 double 附加零?

最佳答案

I see the value of d is 0.0000000 not 0.00 as in the string

但是这两个数字具有完全相同的值。因此,当且仅当它也具有值 0.00 时,它才可以具有值 0.0000000。

How do I get exact content of string assigned to double d?

你不能。 double 代表一个数值。它表示字符串。

另外,更一般地说,这是不可能的,因为 float 不能表示字符串可以表示的所有数字。但这不是 0 的问题,它确实是可表示的。

I am writing a method that returns a double with precision as needed. For example if I have 2.446343434 as value of d and precision is 2, how can I get my method return d as 2.45

除非 double 的格式可以表示 2.45,否则您无法让您的方法返回值为 2.45 的 double。 IEEE 754 规定的binary64 格式不能表示2.45。在这种情况下,您能做的最好的事情就是返回最接近具有 2 个有效小数位的数字的可表示数字,在 IEEE 754 的情况下,这将是 2.45000000000000017763568394003。您问题中的程序实现了这一点。

如果这不是您想要的,那么 float 不适合您的用例。

关于c++ - 如何在 C++ 中将字符串的确切内容分配给 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251020/

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