gpt4 book ai didi

c++11 - 为什么 'scientific' 改变了 'precision' 的含义?

转载 作者:行者123 更新时间:2023-12-05 00:13:25 26 4
gpt4 key购买 nike

这是一个 MWE:

#include <iostream>

int main()
{
std::cout.precision(17);
std::cout << 1.2345678901234567890 << '\n';
std::cout.setf(std::ios_base::scientific);
std::cout.precision(17);
std::cout << 1.2345678901234567890 << '\n';
}

在我的机器上打印:
1.2345678901234567
1.23456789012345669e+00

最后一个输出有一个额外的数字( 18 而不是我明确要求的 17 )。为什么?

最佳答案

follows the rules of printf ,在从流状态组装格式说明符之后。

int main()
{
std::printf("%.17g\n", 1.2345678901234567890);
std::printf("%.17f\n", 1.2345678901234567890);
std::printf("%.17e\n", 1.2345678901234567890);

std::printf("%.17g\n", 1234567890.1234567890);
std::printf("%.17f\n", 1234567890.1234567890);
std::printf("%.17e\n", 1234567890.1234567890);
}

既没有 std::ios_base::scientific 也没有 std::ios_base::fixed ,格式是 "%.17g" ,一共 17 位数字
std::ios_base::scientific 的格式为 "%.17e" ,对应于小数点后 17 位数字加上指数。由于小数点前只有一位数字,因此总共有 18 位数字
std::ios_base::fixed 的格式为 "%.17f" ,对应小数点后的 17 位数字。小数点前可能有多个数字,这导致总数字为 18 位或更多

关于c++11 - 为什么 'scientific' 改变了 'precision' 的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641876/

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