2014-11-04 3 views
1

Я хочу получить 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 является правильным двойным номером.

Мои тестовые примеры есть:

  • двойной -> долго долго
  • 234343,0 -> 234343
  • 3.41e10 -> 34100000000
  • 19,999999999 -> 19
  • -10,1 -> - 10
  • -0.0000001 -> 0

Есть ли какой-то прекрасный способ выполнить мою задачу?

+2

Вы говорите о преобразовании строк, содержащих числа с плавающей запятой, в 'long long' или фактические переменные' double'? – Columbo

+0

@Columbo, На самом деле, у меня двойная переменная. Но, если вам нужно использовать double -> string -> long long, это тоже хорошо. – Denis

+2

XY проблема? Зачем нужна электронная нотация? – cppguy

ответ

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