gpt4 book ai didi

C++:将 double / float 转换为字符串,保留科学记数法和精度

转载 作者:行者123 更新时间:2023-11-28 01:59:52 24 4
gpt4 key购买 nike

我正在尝试将 double / float 转换为字符串。其中一些数字包含科学计数法“e”,我想在转换后保留它。我通过 google 和 stackoverflow 进行了搜索,但没有找到与我的用例相匹配的答案。

以下是一些示例和预期输出:

input: 1.7976931348623157e+308
output: "1.7976931348623157e+308"

这是一个可以编译的完整main.cc文件:

#include <iostream>
#include <sstream>
#include <string>

template <typename T>
std::string ToString(T value) {
std::stringstream out;
out << std::fixed;
out << value;
return out.str();
}

int main () {
double mydouble = 1.7976931348623157e+308;
std::cout << ToString(mydouble) << std::endl;
}

--- 上午 11:17 更新 -----

运行我上面的独立代码后没有更多奇怪的字符,但输出是一个长字符串格式的 float :

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

不是预期的“1.7976931348623157e+308”。

-------- 已过时 --------------

但是输出的是一个奇怪的字符串:

"179769313486231610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000ÍÍÍÍÍÍÍÍýýýý««««««««««««««««îþîþîþîþ"

最佳答案

两件事:

如果您想要科学记数法,那么 Fixed 不是您想要的。恰恰相反。

编译时

#include <iostream>
#include <sstream>

template <typename T>
inline std::string ToString(T value) {
std::stringstream out;
out << std::fixed;
out << value;
return out.str();
}
int main()
{
double mydouble = 1.7976931348623157e+308;
std::cout << ToString(mydouble) << std::endl;
}

我明白了

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

这是正确的,这意味着您的 C++ 编译器或标准库中存在错误。

关于C++:将 double / float 转换为字符串,保留科学记数法和精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980116/

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