如何打印全浮点数而不是“1.01383e + 007”?

时间:2011-12-20 20:27:13

标签: c++ floating-point

我想打印掉一些大型浮点数的完整合法值,但是当浮点数足够大时,你会得到诸如“1.01383e + 007”之类的符号。你怎么能得到合法的价值?

4 个答案:

答案 0 :(得分:6)

我读你的问题意味着你不想输出科学的格式。如果是这样,那么您可以像这样控制流格式:

cout << setiosflags(ios::fixed) << thefloat << endl;

答案 1 :(得分:3)

浮点的一个重要特征是,对于较大的值,它们没有与所有有效数字相关联的精度回到小数点。 “科学”展示合理地反映了固有的内部存储现实。

如果要显示10138300(例如),请使用具有更重要数字的数据类型,例如C系列语言中的double,最多10个 15 左右的值。或者使用扩展精度整数表示,例如longlong long,具体取决于CPU架构和编程语言或环境。

答案 2 :(得分:0)

float数据类型不存储精确值,因此无法打印出确切的值。

float中,32位分为三个不同的部分:符号位,指数和尾数,如:S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

简单来说,代替存储精确的&#34; 12345678&#34;,float数据类型只会存储&#34; 1.23 * 10 ^ 7&#34; (而double数据类型将存储&#34; 1.2345 * 10 ^ 7&#34;)。其他数字丢失。

也许你可以查看&#34; Big Integer&#34;如果你对大数字的精确值感兴趣,可以用C ++编写库。

答案 3 :(得分:0)

你需要使用一个十进制库,例如gmp; “1.01383e + 007”格式是由于存储浮点数的方式。