乘法浮点数给出无限值

时间:2014-05-19 13:56:45

标签: c++ multiplication

我尝试了很多方法:

float a = 1234.34;
float b = 1234.52;
float r = a * b;
cout << r << endl;
float c = 1234.34 * 1234.52;
cout << c << endl;

cout << 1234.34 * 1234.52 << endl;
cout << (float)(1234.34 * 1234.52) << endl;

所有这些似乎都给出了无限的价值......

1.52382e+006
1.52382e+006
1.52382e+006
1.52382e+006

我在这里做错了什么?

5 个答案:

答案 0 :(得分:5)

结果中的数字无法接近无穷大。

结果就是C ++以科学记数法显示价值。

请检查How to avoid scientific notation for large numbers?

答案 1 :(得分:2)

价值观不是无限的,它们只是用科学记数法。

1.52382e+006评估为1.52382 * (10)^6

您可能想要使用doubles,并设置ostream的精度:

#include <limits>    // std::numeric_limits
#include <iostream>  // std::cout

int main() {
  double f = 3.141592;

  std::cout.precision(std::numeric_limits<double>::digits10);
  std::cout << std::fixed;
  std::cout << f;

  return 0;
}

答案 2 :(得分:1)

答案是对的。 1.52382e + 006与1.52382 * 10 6

相同

如果您不想使用E格式输出,请使用std::fixed

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    float a = 1234.34;
    float b = 1234.52;
    float r = a * b;
    cout << std::fixed << r << endl;
    float c = 1234.34 * 1234.52;
    cout << std::fixed << c << endl;

    cout << std::fixed << 1234.34 * 1234.52 << endl;
    cout << std::fixed << (float)(1234.34 * 1234.52) << endl;
    return 0;
}

此代码输出以下内容

  

1523817.375000
  1523817.375000
  1523817.416800
  1523817.375000

答案 3 :(得分:0)

你得到的是你的结果的科学记数,1523817.4168,科学记数法是1.52382E + 6,其中E代表&#34; 10 ^&#34;,意思是1.52382 * 10 ^ 6,你可以查一查。

答案 4 :(得分:0)

这只是科学记数法。它并不代表无限。