на него не смог...
Мне нужно округлить float до 2 знаков после запятой, не подскажете, как это можно сделать?
(Для языка Си)
решение в лоб - умножить на 10^2 скастить в int, поделить обратно, скастив во float. не уверен в его правильности
Вместо каста можно roundf.
А если человеку надо округлить в меньшую или большую сторону?
Я бы сказал нужно, т.к. каст просто отбросит дробную часть, а не округлит.
в таком случае можно сразу готовую функцию найти, и не думать о том что там под капотом
Не уверен, что для конкретного знака после запятой есть готовая функция.
Найс, прошло мои тесты
предложите как правильно
Вы же про это ?
Ты разобрался? Что хочешь невозможное ?
Если нужно 1.23000 получить из 1.23456, попробуй trunc(1,23456*100)/100.0
Через trunc получается вроде?
Я проверил, сработало
Ему ж надо до двух знаков
Ага.. Ну ну...
Если нужно 1.23000 получить из 1.23456, попробуй trunc(1,23456*100)/100.0
Какого типа 1.2300 ?
Double вроде
Всё ничего, а если значение что-нибудь близкое к миллиарду хотя бы?
Ну ты понимаешь, что там нет десятичных цифр?
Ну вот, надо прежде это осознать
Ну так работает же
Так а что случится? Там же младшие разряды точность терять будут
Я скорее про переполнение. Вот умножим мы число на 100 и как мы уверены что мы получим то что хотим, а не -2 миллиарда с шишом?
А он разве не даблы на 100 умножает?
ЧИТАТЬ ВСЕМ! https://habr.com/ru/post/112953/ https://smartcoderteam.github.io/what-should-every-programmer-know-about-floating-point-numbers/
Ну я про 2 миллиарда условно сказал. Хз как переполнение дабла происходит
В инф разве что выпадет хз
дело не в этом. Дело в том, что округление до каких-то десятичных знаков БЕССМЫСЛЕНО для чисел с плавающей точкой, они ДВОИЧНЫЕ, Там нет десятичных знаков. Всё , что вы сделаете, это округлите, поделите, домножите и получите НОВУЮ ПОГРЕШНОСТЬ В ЧИСЛЕ
Ну если так, то ладно)
Спасибо большое, я уже справился:)))
Обсуждают сегодня