2016-10-04 4 views
0

В нашем приложении есть около 200 decimal переменных. Есть ли способ, которым мы можем округлить десятичное число до 2-х мест перед назначением.Завершение Десятичное значение на уровне приложения в C#

Или любой уровень приложения конфигурация для достижения этой цели

В настоящее время мы постараемся добиться с помощью Extension метода ниже

public static decimal RoundOff(this decimal value) 
{ 
    return Math.Round(value,2); 
} 
+0

ли вы хотите ** ** каждого десятичного быть автомагический округляется с 2 десятичными знаками и игнорирует каждую цифру после этого? – zdimension

+0

Да, каждые десятичные знаки после 2 десятичных знаков следует игнорировать –

+1

Что вы хотите, если вы добавите два десятичных знака? Должны ли они быть усечены до или после добавления? Значение –

ответ

2

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

public struct RoundedDecimal: IEquatable<RoundedDecimal>, IFormattable, IComparable<RoundedDecimal> 
{ 
    private readonly decimal value; 

    public RoundedDecimal(decimal value) 
    { 
      this.value = Math.Round(value, 2); 
    } 

    public static implicit operator RoundedDecimal(decimal value) => 
     new RoundedDecimal(value); 

    public static explicit operator Decimal(RoundedDecimal value) => 
     value; 

    public static RoundedDecimal operator *(RoundedDecimal left, RoundedDecimal right) => 
     new RoundedDecimal(left.value * right.value); 

    //and so on 
} 
+0

Итак, мы должны заменить все 'decimal' на' RoundedDecimal' –

+0

@vikas да, это правда. – InBetween

3

Нет, нет никакого способа, чтобы контролировать количество десятичных знаков, хранящихся в значениях decimal тип.

Вы можете либо круглые значения с помощью кода, как вы делаете сейчас, или, может быть, только выходные значения с 2 десятичными точками (c# - How do I round a decimal value to 2 decimal places (for output on a page))

0

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

+0

Уродливые? Зачем? Я не понимаю. – InBetween

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

  • Нет связанных вопросов^_^