Проблемы с десятичным округлением - PullRequest
0 голосов
/ 29 мая 2020

У меня есть сценарий, в котором некоторые значения переменных имеют десятичные значения, значения могут иметь ведущие .0, .234, .124, .125, числа, подобные этому, и так далее. Если число имеет ведущую десятичную дробь и ноль, его следует игнорировать, а если число имеет ведущие 3 или более чисел, оно должно округляться до двух. Допустим, код выглядит следующим образом:

var anone    = "23"
var antwo    = "23.0"
var anthree  = "23.467"
var anfour   = "23.125"

Чтобы удалить начальную десятичную дробь и ноль, я использовал следующий метод:

 var removingzero = antwo.Replace(".0", "");
 // The result will be = 23

Чтобы округлить и ограничить число до двух десятичных знаков. Я использовал следующий метод:

 var convertodecimal = Decimal.Parse(anthree);
 var roundtotwo      = Math.Round(convertodecimal, 2);
 // The result will be = 23.47

аналогично, чтобы преобразовать последнее, я следую тому же методу:

 var convertodecimal = Decimal.Parse(anfour);
 var roundtotwo      = Math.Round(convertodecimal, 2);
 // The result will be = 23.12
 // But the Result should be = 23.13

Итак, проблема в том, когда Я пытаюсь округлить любое число, как в предыдущем примере, он этого не делает, как я могу это исправить.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Попробуйте изменить Math.Round () на значение ниже одного:

Math.Round(num,2, MidpointRounding.AwayFromZero)

1 голос
/ 29 мая 2020

Похоже, ваш вопрос - это длинный способ задать «Как я могу принудительно округлить ВВЕРХ, если десятичное число заканчивается на 5

Если это так, тогда вы можете использовать перегрузку из Math.Round, которая принимает аргумент MidpointRounding, и указать либо MidpointRounding.AwayFromZero, либо MidpointRounding.ToPositiveInfinity.

Поведение этих то же самое для положительных чисел, но разница видна с отрицательными числами, где -23.125 округляется до -23.13, если указано AwayFromZero, или -23.12, если указано ToPositiveInfinity.

Итак вместо этого ваш код может выглядеть так:

var roundtotwo = Math.Round(convertodecimal, 2, MidpointRounding.AwayFromZero);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...