c++;库特<&书信电报;[双精度]不打印小数位 我有一个简单的C++程序,我认为它会打印出f和g中定义为double值的双值…但是C++是把它们打印成整数。我检查了cout的默认精度,当我运行它时,输出显示默认精度应该是6,所以我不明白为什么double不能正确打印 #include <iostream> #include <stdio.h> int main() { double f = 735416.416898; double g = f + 0.3; std::cout << "default precision is " << std::cout.precision() << std::endl; std::cout << "[c++] f = " << f << std::endl; std::cout << "[c++] g = " << g << std::endl; printf("[c] f = %f\n", f); printf("[c] g = %f\n", g); f = 735416.516898; g = f + 0.3; std::cout << "[c++] f = " << f << std::endl; std::cout << "[c++] g = " << g << std::endl; printf("[c] f = %f\n", f); printf("[c] g = %f\n", g); return 0; }

c++;库特<&书信电报;[双精度]不打印小数位 我有一个简单的C++程序,我认为它会打印出f和g中定义为double值的双值…但是C++是把它们打印成整数。我检查了cout的默认精度,当我运行它时,输出显示默认精度应该是6,所以我不明白为什么double不能正确打印 #include <iostream> #include <stdio.h> int main() { double f = 735416.416898; double g = f + 0.3; std::cout << "default precision is " << std::cout.precision() << std::endl; std::cout << "[c++] f = " << f << std::endl; std::cout << "[c++] g = " << g << std::endl; printf("[c] f = %f\n", f); printf("[c] g = %f\n", g); f = 735416.516898; g = f + 0.3; std::cout << "[c++] f = " << f << std::endl; std::cout << "[c++] g = " << g << std::endl; printf("[c] f = %f\n", f); printf("[c] g = %f\n", g); return 0; },c++,C++,因为默认精度显示为6,所以不应该也显示小数点后6位吗 如果我这样做 std::cout << std::fixed << f 发生这种情况是因为默认表示法和固定表示法之间存在区别 根据, 使用默认的浮点表示法,“精度”字段指定总共显示的最大有意义位数,包括小数点前后的位数。请注意,它不是最小值,因此,如果数字的显示位数小于精度,则不会用尾随零填充显示的数字 在固定符号和科学符号中,精度字段精确指定小数点后显示的位数,即使这包括后面的小数点零。在这种情况下,小数点前的数

因为默认精度显示为6,所以不应该也显示小数点后6位吗

如果我这样做

std::cout << std::fixed << f

发生这种情况是因为默认表示法和固定表示法之间存在区别

根据,

  • 使用默认的浮点表示法,“精度”字段指定总共显示的最大有意义位数,包括小数点前后的位数。请注意,它不是最小值,因此,如果数字的显示位数小于精度,则不会用尾随零填充显示的数字
  • 在固定符号和科学符号中,精度字段精确指定小数点后显示的位数,即使这包括后面的小数点零。在这种情况下,小数点前的数字与精度无关 (增加了重点)

流使用默认的浮点表示法,直到(或除非)您将其切换为固定或科学表示法。由于您的数字在小数点之前有六位数字,并且默认精度也设置为六,因此浮点数看起来像整数。

有三种浮点数表示法:

  • 对于定点表示法
  • 科学记数法
  • (无)默认表示法
默认的表示法只是使用精度值来计算数字的所有位数,而不仅仅是小数部分。如果使用较短的数字(如3.1415),可以看到该数字显示正确

同样有趣的是,作为cites,我们知道:

可以通过调用str.()来选择默认符号



注:对于C++11,有了新的表示法:十六进制和之前所谓的(无)。

那么
setprecision
呢?它只显示6位精度,而您的数字在十进制之前有6位精度,因此十分位需要精度7才能显示。这很有意义,精度指的是前后两位数字。谢谢
std::cout << std::fixed << f