Есть 3 переменных:
a — тип Int;
b — тип Int;
c — тип Long
Столкнулся с тем, что в выражении:
с = a * b;
правая часть, по умолчанию, сначала преобразуется
в Int, а потом в Long. Соответсвенно при больших
a и b и «переполнении» Int (скажем 300 000 и 10 000)
результат получается некорректный.
Приходится заморачиваться конструкцией:
c = Convert.ToInt64(a) * Convert.ToInt64(b);
По-другому никак не реализовать корректный расчёт?
ну а тогда чем не нравится преобразование множителей в более «старшие» типы?
Что смущает? усложнение читаемости кода? лишние преобразования или еще что?
Рустам TradeInWest.ru, в целом устраивает, но вдруг,
где ещё «вылезет» переполнение, а я не замечу
(на тестинге не отловлю).
Может есть какая-нить глобальная установка компилятору,
как по-умолчанию делать неявные преобразования…
Андрей Кучумов, ну и вывод?
Если такая большая неопределенность везде (хотя я сомневаюсь), то ставь везде по максимуму типы.
Хотя это и дурной стиль. По канонам — надо максимально детально планировать архитектуру и типы подбирать под реальные потребности. Но мы живем не в идеальном мире.
Рустам TradeInWest.ru, обычно цену я запихиваю вообще
в Int16 или UInt16, по возможности. Тут тоже может
вылезти «переполнение», хотя вроде код прошерстил…
Рустам TradeInWest.ru, если пишешь робота, то цена — double или decimal. Если прогу для оптимизации и тестирования стратегий, то только int. В последнем случае надо предварительно умножить цену, чтоб точность не потерять — для ES mini например надо цену на 100 умножать, ну и комиссию и проскальзывание соот-но учесть нужную.
AUD/NZD: быки вошли во вкус, подтягивая котировки к новым высотам
Кросс-курс AUD/NZD после пробоя локального уровня 1.1692 откатился к нему и сейчас активно «топчется», осваивая свежую поддержку. Также стоит обратить внимание на то, что в текущий понедельник...
Россети Урал. Отчет об исполнении инвестпрограммы за Q4 2025г. Считаем дивиденды!
Компания Россети Урал опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые показатели компании по РСБУ в 4 квартале (ну и понятно за целый год): 👉Выручка...
Акции Лензолота резко упали. Что происходит — рассказывают аналитики Market Power Лензолото (LNZL) ➡️ Инфо и показатели Возможно, многие забыли, но еще в августе прошлого года...
Интер РАО. Неужели дивиденды будут минимальными за 3 года? Обзор производственных результатов и отчета РСБУ за Q4 2025г.
Вышел отчет по РСБУ за Q4 2025г. от компании Интер РАО: 👉Выручка — 15,49 млрд руб.(-14,0% г/г)
👉Себестоимость — 12,79 млрд руб.(-10,8% г/г)
👉Валовая прибыль — 2,70 млрд руб.(-26,7% г/г)...
www.mos-gorsud.ru/rs/meshchanskij/services/cases/criminal-materials/details/2d41e690-0b0d-11f1-95f2-6587e404268c?participant=%D0%9C%D0%BE%D1%88%D0%BA%D0%BE%D0%B2%D0%B8%D1%87+%D0%92.%D0%9D
На 18 ч...
Во-первых, кому надо те и сейчас могут взять кредит даже дешевле чем 5 тыс в месяц на сильно подержанный автомобиль, который ничем не хуже нового АвтоВАЗа.
Во-вторых и в-главных: высокая «а...
Лента: впечатляющий рост выручки, но есть тревожные звоночки 🛒Сегодня предлагаю разобрать операционные результаты Ленты за 4 кв. 2025 года, а также подвести итоги компании за 2025 год в целом. Цифры р...
Лента: впечатляющий рост выручки, но есть тревожные звоночки 🛒Сегодня предлагаю разобрать операционные результаты Ленты за 4 кв. 2025 года, а также подвести итоги компании за 2025 год в целом. Цифры р...
Лонг — максимум в 9 223 372 036 854 775 807
Ориентируетесь на соответствующие значения в а и b.
Int переполнится и «обрежет» значение, при этом ошибки
не будет.
как правило у компиляторов знаковый. По крайней мере
так делает мой SharpDevelop 4.2
Что смущает? усложнение читаемости кода? лишние преобразования или еще что?
где ещё «вылезет» переполнение, а я не замечу
(на тестинге не отловлю).
Может есть какая-нить глобальная установка компилятору,
как по-умолчанию делать неявные преобразования…
Если такая большая неопределенность везде (хотя я сомневаюсь), то ставь везде по максимуму типы.
Хотя это и дурной стиль. По канонам — надо максимально детально планировать архитектуру и типы подбирать под реальные потребности. Но мы живем не в идеальном мире.
в Int16 или UInt16, по возможности. Тут тоже может
вылезти «переполнение», хотя вроде код прошерстил…
или ты цены всегда умножаешь на какой-то множитель, чтобы было целым?
Уж что что, а цену сам Бог велел в double или decimal (лучше) пихать. как мне кажется.
возможных значение. Считает быстрее, массивы компактнее.
Цена меняется в конечных пунтах.
«или ты цены всегда умножаешь на какой-то множитель, чтобы было целым?»
но если честно — не вижу в этом смысла большого
в данном случае я бы так делал:
int a = 300;
int b = 400;
decimal c = (decimal)a * (decimal)b;
Памяти нажрёт decimal.
Ну и считает поди чуть-чуть медленнее.
Для финансовой сферы рекомендуется использовать decimal.