2015-11-18 2 views
4

Как вы можете округлить до ближайшего ровного цента ?. Таким образом, для следующих знаков после запятой, я хочу округлить и количество дисплея доллара:Круглый десятичный до ближайшего четного цента

1230.3092 => $1230.30 
221.9672 => $221.96 
12345.6808 => 12345.68 

Я попытался это

Math.Round(value, 2, MidpointRounding.ToEven) 
decimal.Round(value, 2, MidpointRounding.ToEven) 

, но какая-то причина он округляет.

+0

Это не так, как работает округление. Если вы хотите определить свои собственные правила математики, вам придется самостоятельно реализовать эти правила. Встроенные компоненты используют стандартные правила математики. – David

+0

Добавьте еще несколько примеров, например '1.005',' 10000000000.05'. Это не очевидно. – leppie

ответ

4

Вы хотите:

(0.02m/1.00m) * decimal.Round(value * (1.00m/0.02m)) 

value * (1.00m/0.02m) это сумма денег, с точки зрения "2-х центов" единицу. Закруглите это пространство до целого числа, а затем конвертируйте обратно в доллары.

MidpointRounding следует использовать для определения того, как вы хотите, например, 100.01m округлить, так как он находится на полпути между 100.00m и 100.02m.

+0

Так что это значение по умолчанию, зачем его определять? – leppie

+0

это все еще округляет до 1230.31, и это должно быть: 1230.30 – ShaneKm

+1

@TimothyShields: вопрос на самом деле сложнее, чем вы думаете;) – leppie

1

Вы пытаетесь следовать нестандартным правилам округления, поэтому встроенные функции не будут делать то, что вы ищете. Либо перегрузите методы, либо создайте свои собственные - похоже, вам просто нужно обрезать до двух десятичных знаков, а затем добавить один, если результат нечетный (или пол затем добавить один).

+0

Halfway означает halfway: 1230.3050 на полпути. 1230.3092 нет. – SteveO

Смежные вопросы