Существует ли элегантный способ конвертировать двойную в длинную длинную?

я хочу получить 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

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

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

демонстрация.

2

Другие решения


По вопросам рекламы [email protected]