170 похожих чатов

Если я буду складывать много разных FF = math.Ceil(FF*100) /

100, можно гарантировать что оно никогда не превратится во что-то вроде 123.999999999?

16 ответов

23 просмотра

это особенности float, так что гарантировать нельзя

Andrey-Burov Автор вопроса

промежуточные буду округлять с помощью ceil, а сумму с помощью round и вроде все ОК должно быть

Andrey Burov
промежуточные буду округлять с помощью ceil, а сум...

если у тебя известно сколько цифр после запятой (например, цена товара), то лучше считать все как int, а после делить на 100

Можно гарантировать, что превратится

Владимир
Только? Поделите столбиком 10/9.. ;)

очевидно) только в задаче, насколько я понял, не предполагается деление, а только лишь сложение

МСМК
очевидно) только в задаче, насколько я понял, не п...

Сложение и умножение не приводят нив какой системе счисления к нерациональным числам.. насколько помню теорию за первый курс.. проблема в машинном переводе из десятичной в двоичную системы и обратно,т.к. операции имеют под капотом деление. Для корректных вычислений двоично-десятичная арифметика и 4-х разрядные системы.. ;) ну или десимал, что и есть вычисления в целых числах со сдвигом. Только умножать надо не на 100, а на кратно двум.. ;)

МСМК
если у тебя известно сколько цифр после запятой (н...

стандартная практика - хранить деньги в микроцентах (микрокопейках) плохо работает с сатоши 🙂 (одной бирже пришлось на int128 перейти)

Andrey-Burov Автор вопроса
Daniel Podolsky
стандартная практика - хранить деньги в микроцента...

есть еще экзотически валюты где это тоже не работает Мальти́йский ску́до (итал. scudo maltese) — денежная единица Мальтийского ордена. Скудо = 12 тари = 240 грано.

Владимир
Сложение и умножение не приводят нив какой системе...

к иррациональным не приводят, но страшна не только иррациональность, но также периодичность записей

Andrey Burov
есть еще экзотически валюты где это тоже не работа...

ну и храните в микро-грано. В целом идея в том чтобы считать в долях наименьших единиц где-то в районе 12 знака после запятой чтобы нивелировать округления.

Andrey-Burov Автор вопроса
Dmitry
ну и храните в микро-грано. В целом идея в том что...

ну вот конкретно в моем случае, должны быть math.Ceil и они должны накапливаться

Andrey Burov
ну вот конкретно в моем случае, должны быть math.C...

я не вчитывался в ваш код, но для всяких систем есть рекомендации регуляторов как правильно считать и что делать при расчетах (налоговики, центробанк), какое округление использовать в каких случаях.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта