1

我想得到integer partdouble但是这种方式对我不起作用:

double param, fractpart, intpart;

param = 3.14159265;
fractpart = modf (param , &intpart);
printf ("%f = %f + %f \n", param, intpart, fractpart);

这是由于事实,double integer可能有e-notation。例如,3.41e10是正确的双数。

我的测试用例是:

  • 双 -> 长长
  • 234343.0 -> 234343
  • 3.41e10 -> 34100000000
  • 19.999999999 -> 19
  • -10.1 -> -10
  • -0.0000001 -> 0

有什么漂亮的方法可以完成我的任务吗?

4

1 回答 1

3

通过隐式转换截断你的结果应该这样做:

std::cout << (long long)234343.0     << '\n'
          << (long long)3.41e10      << '\n'
          << (long long)19.999999999 << '\n'
          << (long long)-10.1        << '\n'
          << (long long)-0.0000001   << '\n';

应该在您的机器上输出

234343
34100000000
19
-10
0

演示

于 2014-11-04T22:11:33.000 回答