#c #type-conversion
#c #преобразование типа
Вопрос:
В настоящее время я сталкиваюсь со странным случаем: у меня двойное значение с одним десятичным числом, т.е. 24.9
из этого значения я хочу получить всю часть, т.е.. целое = 24 и, кроме того, десятичная часть в виде: decimal = 9
для этого я действую следующим образом
double temp_double = 24.9;
double entire;
double decimal = modf(temp_double, amp;entire)*10;
что дает :
>printf("entire part = %fn", entire);
>printf("decimal part = %fn", decimal);
entire part = 24.000000
decimal part = 9.000000
Затем для дальнейшей обработки мне нужно преобразовать его в целое число, поэтому я делаю
entire = (int)entire;
decimal = (int)decimal;
и затем, если я его напечатаю, это даст мне :
entire part = 24
decimal part = 8 ==> erroneous value
с 24.7 я сталкиваюсь с аналогичной проблемой (получаю 6 вместо 7).
Я знаю, что это проблема с округлением, и я хотел бы знать, могу ли я каким-либо образом улучшить свой код, чтобы смягчить эти проблемы. Я имею в виду, есть ли какие-либо дополнительные вычисления (используйте другой масштаб, другую базу, что угодно …), Которые я мог бы применить, чтобы, наконец, получить правильное значение для десятичной части?
в противном случае многие значения могут отображаться неправильно
любая помощь приветствуется … 🙁
Комментарии:
1. Используйте
round()
функцию: en.cppreference.com/w/c/numeric/math/round2. Как бы вы справились с вводом
24.86
? Если это неверно, и у вас есть только входные данные с точностью до одного знака после запятой, вы не должны использовать числа с плавающей запятой — вы должны использовать что-то вродеint
, но масштабировать в 10 раз.3. ну, на самом деле это то, что я понял, и я так и сделаю… Я делил для удобства, пока не столкнулся с проблемой, но я могу справиться с коэффициентом 10. Спасибо 🙂
Ответ №1:
Ну, наконец, я буду использовать десятикратный коэффициент, так как с ним будет легко справиться в дальнейших обработках. Я должен был быстрее читать комментарии, это сэкономило бы мне некоторое время. Спасибо @AndrewHenle и @AdrianMole за вашу помощь
Комментарии:
1. серьезный вопрос, почему вы не используете функцию round() ? В качестве проблемы? Или просто потому, что вы не хотите его использовать?
2. Ну, изначально мои данные — это данные о температуре, которые я извлекаю из кадра, и они выражаются в десятых градусах. Я предпочитаю использовать коэффициент 10, поскольку он справедлив… ничего не делать. В то время, когда мне действительно нужно использовать десятичное значение, я просто делаю «значение», чтобы получить десятичную часть.