Member 12951383 Ответов: 2

Как разделить две части двойного числа и превратить его в int в C?


Например, я получил:

18.75 но я хочу разделить их на две разные переменные, 18 и 75?

Что я уже пробовал:

Я попробовал функцию modf и преобразовал ее в int, но есть ли более простой способ сделать это, кроме этого?

Peter_in_2780

Действительно грубо, но эффективно:
...
sprintf(tempstring, "%f", inputfloatnumber);
использования sscanf(tempstring, "%д%д" &амп;integerpart, &ампер;fractionpart);
...
Вы можете делать всевозможные причудливые вещи, украшая спецификатор формата %f

Bernhard Hiller

Напоминает мне ошибку, введенную гениальными программистами в штаб-квартире предыдущего работодателя в США: они рассудили, что IP-адрес может быть представлен двумя числами с плавающей запятой, которые соединяются точкой. Хорошо работал в США. Но здесь, в Германии, это с треском провалилось: 192,168. 0,42-неправильный IP-адрес...

KarstenK

modf-это просто, он дал два результата с одной функцией.

2 Ответов

Рейтинг:
1

CPallini

Цитата:
но есть ли более простой способ сделать это, кроме этого?
Нет, насколько мне известно. Извлечь целочисленную часть очень просто: просто назначьте двойник целочисленной переменной. Однако преобразование десятичной части в целое число менее очевидно. В конце концов, должна же быть причина ... modf функция существует.


Daniel Pfeffer

Извлечение целочисленной части путем присвоения 'double' ' int ' - не очень хорошая идея. Что делать, если целая часть переполняется "int"?

(например, значение "double" равно 2^31, а " int " -32-битное дополнение двоек.)

CPallini

Ну, конечно, это не относится к общему случаю. Однако, если вы знаете, что делаете, то есть заранее знаете, что операнды ограничены, вы можете безопасно использовать его.

Рейтинг:
0

Patrice T

Взгляните на функцию modf
Язык C: функция modf (разбиение на целые и дробные части)[^]

Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]

[Обновление]

Цитата:
Я попробовал функцию modf и преобразовал ее в int, но есть ли более простой способ сделать это, кроме этого?
В чем ваша проблема с modf ? он делает именно то, что вы хотите.


Peter_in_2780

ОП уже сказал, что он использовал modf

Patrice T

упс. Пропустил последнюю фразу.