【问题标题】:Does elegant way exist to convert double to long long?是否存在将 double 转换为 long long 的优雅方式?
【发布时间】:2014-11-04 22:02:40
【问题描述】:

我想得到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 是正确的双数。

我的测试用例是:

  • double -> long long
  • 234343.0 -> 234343
  • 3.41e10 -> 34100000000
  • 19.999999999 -> 19
  • -10.1 -> -10
  • -0.0000001 -> 0

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

【问题讨论】:

  • 您是说将包含浮点数的字符串转换为long long 或实际的double 变量吗?
  • @Columbo,实际上,我有双变量。但是,如果你需要转换 double -> string -> long long,那也很好。
  • XY 问题?为什么电子符号很重要?
  • @cppguy,可能是 XY 问题。我的主要任务是将双变量转换为整数数组(该数组用于存储大数)。

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


【解决方案1】:

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

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.

【讨论】:

  • 一般来说应该避免使用老式的演员表。在这种情况下,您需要static_cast&lt;long long&gt;()
猜你喜欢
  • 1970-01-01
  • 2014-09-30
  • 2015-08-23
  • 2021-12-03
  • 2013-01-20
  • 2013-03-15
  • 2014-02-02
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多