2014-11-04 69 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

相關問題