Есть 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 умножать, ну и комиссию и проскальзывание соот-но учесть нужную.
📈 «Собственные решения становятся основой нашего долгосрочного роста»
IR-директор ГК Softline Александра Мельникова дала интервью для «Эксперт РА» в рамках форума «Стратегическая сессия финансового рынка». В материале она поделилась тем, какие факторы сегодня...
Торговая активность наших клиентов на срочном рынке активно росла в 1-м квартале — на 66% с января по март.
Более того, март — рекордный месяц по объёму сделок с фьючерсами и опционами...
ЮМГ МСФО 2025 г. - чистая денежная позиция превратилась в чистый долг
Компания Юнайтед медикал групп опубликовала финансовые результаты за 2025 год. Выручка компании за год выросла на 14,1% до 289,5 млн евро. В рублях рост составил +9,8% до 27,3 млрд руб. Во 2-м...
Alexander7, мимо. Я независимый профильный юрист, а не представитель АВО. Но если для вас юридический аудит и работа по закону — это «возбудились», можете продолжать сидеть ровно и ждать, пока акти...
Привет всем, скажите, тут есть системные программисты, отвечающие за скорость процессов, за которыми стоит программная или FPGA сортировка kv пар, ну например u64?
Алексей Шаульский, на будущее для всех: если вы пишется с маленькой буквы это множественное число, если Вы пишется с большой это обращение к собеседнику.Я конкретно по Вам не проходилась.Если все з...
Лонг — максимум в 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.