c++长双精度打印所有数字
c++ long double printing all digits with precision
关于我的问题,我在这里看到了一个帖子,但不理解,因为我是c++的新手。我写了一个小脚本,它从用户那里获得一个数字,并打印出输入数字的阶乘。一旦我输入更大的数字,如30,脚本不会打印出所有的数字。输出像2.652528598 E+32然而,我想要的是确切的数字265252859812191058636308480000000。有人能解释一下如何得到长双位数的所有数字吗?提前感谢
您可以将输出流的精度设置为您想要的任何值,以获得您想要的结果。
http://www.cplusplus.com/reference/ios/ios_base/precision/下面是该页面的摘录,并附有代码示例。
获取/设置浮点十进制精度浮点精度决定了在插入操作中为表示浮点值而写入的最大位数。如何解释这取决于
floatfield
格式标志是设置为特定的符号(fixed
或scientific
)还是不设置(使用default
符号,这并不一定等同于fixed
或scientific
)。使用默认的浮点数表示法,precision字段指定在计算小数点之前和之后的总数时显示的有意义数字的最大数目。请注意,它不是最小值,因此,如果数字可以用比精度更少的数字显示,则它不会在显示的数字中填充末尾的零。在固定记数法和科学记数法中,precision字段指定小数点后要显示多少位数字,即使这包括后面的小数零。在本例中,小数点前的数字与精度无关。
这个十进制精度也可以使用参数化操纵器
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;
}
可能的输出:
3.1416
3.14159
3.1415900000
注意,尽管流的精度现在是10,但第一个数字的长度只有5位,而第二个数字的长度是6位,而不是更多。这是因为默认的
floatfield
的精度只指定要显示的最大位数,而不是最小位数。打印的第三个数字在小数点后显示10位,因为在这种情况下floatfield
格式标志被设置为fixed。
- 打印数字图案
- 将数字打印成文字
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 我的问题是关于C++中数字和序列的重复以及如何打印它们?
- 编译器始终打印十六进制/八进制数字
- 我想使用哈希图打印非重复的数字;
- 如何在控制台上打印出带有数字 0-99 的简单数组
- 错误含义;以二进制形式打印数字
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 列中打印数字时如何避免打印垃圾?
- 如何编写一个程序来打印特定基数的前N个数字
- C++ 在地板函数之后以十六进制打印数字
- C 不将重复数字打印到输出
- 阿姆斯特朗数字打印错误
- 用数字打印所有可能的组合
- 将数字打印为字符串类型的数字
- 如何以特定格式将数字打印到字符串的中间
- 如何将矢量中的数字打印到文件中