2014-11-04 68 views
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 - > 341亿
  • 19.999999999 - > 19
  • -10.1 - > - 10
  • -0.0000001 - > 0

是否有一些美丽的方式来完成我的任务?

+2

你说的是将包含浮点数的字符串转换为long long或实际的double变量吗? – Columbo 2014-11-04 22:04:30

+0

@Columbo,其实我有双重变数。但是,如果你需要投双 - >字符串 - > long long,那也是好的。 – Denis 2014-11-04 22:05:44

+2

XY问题?电子记号为什么重要? – cppguy 2014-11-04 22:06:43

回答

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上。

+3

一般来说,应该避免旧式的演员。在这种情况下,你想'static_cast ()' – bames53 2014-11-04 22:46:03

相关问题