是否有优雅的方式将双倍转换为长整数?

时间:2014-11-04 22:02:41

标签: c++ c++11 casting double long-long

我希望得到integer part double。但这种方式对我不起作用:

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是正确的双数。

我的测试用例是:

  • double - >很久很久
  • 234343.0 - > 234343
  • 3.41e10 - > 341亿
  • 19.999999999 - > 19
  • -10.1 - > -10
  • -0.0000001 - > 0

有没有一些漂亮的方法来完成我的任务?

1 个答案:

答案 0 :(得分: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

Demo