Андрей Кучумов
Андрей Кучумов личный блог
30 января 2013, 13:39

Вопрос к программерам на C#.

Есть 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);
По-другому никак не реализовать корректный расчёт?
20 Комментариев
  • Рустам TradeInWest.ru
    30 января 2013, 13:43
    int хранит до 2 147 483 647. Про какие переполнения при 300 000 или 10 000 вы говорите?

    Лонг — максимум в 9 223 372 036 854 775 807
    Ориентируетесь на соответствующие значения в а и b.
  • Рустам TradeInWest.ru
    30 января 2013, 13:49
    ну а тогда чем не нравится преобразование множителей в более «старшие» типы?
    Что смущает? усложнение читаемости кода? лишние преобразования или еще что?
  • Андрей Коган
    30 января 2013, 13:51
    Используй decimal, забей на long

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн