Заявление (long)0.75
возвратит 0 (преобразование двойной долго будет принимать наибольшее целое значение, то есть ниже, чем преобразование двойной). Итак, у вас есть 0 * 9223372036854775807
, который, мы надеемся, 0
. Кстати long
является псевдонимом для Int64
, что означает, что они являются же основными типами, поэтому, (long)Int64.MaxValue
вы литье long
к long
, чтобы исправить это просто использовать double
* long
умножения
long small= (long)(0.25 * long.MaxValue);
long large = (long)(0.75 * long.MaxValue);
Console.WriteLine ("{0:N}", small); //print 2,305,843,009,213,693,952.00
Console.WriteLine ("{0:N}", large); //print 6,917,529,027,641,081,856.00
Дон» t беспокоиться с "{0:N}"
буквально, это просто формат, который дает результат некоторой визуальной красоте. По умолчанию double печатается в научной нотации, что не является столь очевидным (например, 2.30584300921369E+18
для первой операции)
-1 для мало усилий. Это очень легко решить, попробовав –
Что вы ожидаете от этого (долго) 0,25', чтобы вернуться? –