如何打印完整的浮点数而不是"1.01383e+007"?
How to print full float numbers instead of "1.01383e+007"?
我想打印出一些大的浮点数总和的完整合法值,但是当浮点数足够大时,您会得到这种符号,例如"1.01383e+007"。如何获得合法价值?
我理解你的意思是你不想输出科学格式。如果是这样,那么你可以像这样控制流格式:
cout << setiosflags(ios::fixed) << thefloat << endl;
浮点数的一个重要特征是,对于大值,它们没有与所有有效数字(直到小数点)相关联的精度。"科学"的显示合理地反映了内部存储的固有现实。
如果您想显示10138300(例如),请使用具有更多有效数字的数据类型,例如C家族语言中的double
,其值最高可达1015左右。或者使用扩展的精度整数表示,如long
或long long
,具体取决于CPU体系结构和编程语言或环境。
float
数据类型不存储精确值,因此不可能打印出精确值。
在float
中,32位分为三个不同的部分:符号位,指数和尾数,如:S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
简单来说,float
数据类型将只存储"1.23*10^7",而不是存储精确的"12345678"(double
数据类型将存储"1.2345*10^7")。其他数字丢失
如果你对大数的精确值感兴趣,也许你可以看看c++中的"大整数"库。
您需要使用十进制库,例如gmp;"1.01383e+007"格式是由于float的存储方式。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- C++将浮点数乘以分数
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 在数学上将浮点数四舍五入到 N 位小数
- Cython通过浮点数的最快方式,用于高频控制回路
- 如何打印完整的浮点数而不是"1.01383e+007"?