是否存在将双转换为长长的优雅方式

Does elegant way exist to convert double to long long?

本文关键字:长长的 方式 转换 存在 是否      更新时间:2023-10-16

我想得到doubleinteger part。但这种方式对我不起作用:

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

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

通过隐式转换截断结果应该可以:

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

演示