Dam*_*wie 5 c++ precision double
关于我的问题,我在这里看过一篇文章,但由于我是C++的新手,所以不明白.我写了一个小脚本,它从用户获取一个数字,脚本打印出输入数字的阶乘.一旦我输入更大的数字,如30,脚本不会打印出所有的数字.输出就像2.652528598 E + 32然而我想要的是确切的数字265252859812191058636308480000000.有人可以解释如何获得所有数字长双.谢谢你提前
您可以将输出流的精度设置为您想要的任何值,以获得所需的结果.
http://www.cplusplus.com/reference/ios/ios_base/precision/
以下是该页面的摘录以及代码示例.
获取/设置浮点小数精度 浮点精度确定在插入操作上写入的最大位数,以表示浮点值.这是如何解释依赖于是否
floatfield格式标志被设置为一个特定的符号(或者fixed或scientific),或者它是未设置(使用default符号,这不一定等同于或者fixed也不scientific).使用默认浮点表示法,精度字段指定要计算的有意义数字的最大数量,总计算小数点之前和小数点之后的数字.请注意,它不是最小值,因此如果数字的显示位数少于精度,则不会使用尾随零填充显示的数字.在固定和科学记数法中,精度字段确切地指定小数点后显示的位数,即使这包括尾随小数零.在这种情况下,小数点前的数字与精度无关.
也可以使用参数化操纵器修改此小数精度
setprecision.
// modify precision
#include <iostream> // std::cout, std::ios
int main () {
double f = 3.14159;
std::cout.unsetf ( std::ios::floatfield ); // floatfield not set
std::cout.precision(5);
std::cout << f << '\n';
std::cout.precision(10);
std::cout << f << '\n';
std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
std::cout << f << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
可能的输出:
3.1416
3.14159
3.1415900000
Run Code Online (Sandbox Code Playgroud)
注意第一个数字写入的长度是5位数,而第二个数字是6,但不是更多,即使流的精度现在是10.这是因为默认精度
floatfield只指定要显示的最大位数,但是不是最低限度.打印的第三个数字显示小数点后10位,因为floatfield格式标志在这种情况下设置为固定.
| 归档时间: |
|
| 查看次数: |
2075 次 |
| 最近记录: |