我想打印掉一些大型浮点数的完整合法值,但是当浮点数足够大时,你会得到诸如“1.01383e + 007”之类的符号。你怎么能得到合法的价值?
答案 0 :(得分:6)
我读你的问题意味着你不想输出科学的格式。如果是这样,那么您可以像这样控制流格式:
cout << setiosflags(ios::fixed) << thefloat << endl;
答案 1 :(得分:3)
浮点的一个重要特征是,对于较大的值,它们没有与所有有效数字相关联的精度回到小数点。 “科学”展示合理地反映了固有的内部存储现实。
如果要显示10138300(例如),请使用具有更重要数字的数据类型,例如C系列语言中的double
,最多10个 15 左右的值。或者使用扩展精度整数表示,例如long
或long 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”格式是由于存储浮点数的方式。