Округление чисел с плавающей точкой в js и c#

155
26 августа 2019, 03:20

Для примера возьмем число 170844.29499999998. С помощью этой функции на js можно округлять числа с плавающей точкой:

function round(value, decimals) {
  return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}

применив функцию:

round(170844.29499999998, 1)
170844.3
round(170844.29499999998, 2)
170844.29
round(170844.29499999998, 3)
170844.295

Если округлять на стороне C#:

Math.Round(170844.29499999998, 1, MidpointRounding.AwayFromZero)
170844,3
Math.Round(170844.29499999998, 2, MidpointRounding.AwayFromZero) <--??????
170844,3
Math.Round(170844.29499999998, 3, MidpointRounding.AwayFromZero)
170844,295

В коде происходят сравнения, поэтому мне нужно что бы результат при округлении был одинаков. Есть ли способ пофиксить это? Была идея делать так: Math.Round(number - 0.001, 2, MidpointRounding.AwayFromZero) либо так: round(number + 0.001, 2), но я не уверен, как это отразится на приложении.

Answer 1

Возможно, такой способ округления будет более правильным.

function round(value, decimals) { 
  let dec = Math.pow(10, decimals); 
  return Math.round(value * dec) / dec; 
} 
const n = 170844.29499999998; 
console.log(round(n, 1)); 
console.log(round(n, 2)); 
console.log(round(n, 3));

READ ALSO
Как сделать окно приложения C# невидимым и не показывать в трее?

Как сделать окно приложения C# невидимым и не показывать в трее?

Как сделать окно приложения C# невидимым и не показывать в трее?

174
Перехват bad request на клиенте

Перехват bad request на клиенте

У меня есть в приложении mvc фильтр для генерации ошибок на клиент

161
Передача файла на сервер

Передача файла на сервер

Нашёл на stackoverflow тему как передавать файл с клиента на серверhttps://stackoverflow

175
Конструктор возвращает null

Конструктор возвращает null

Имеется следующий код:

152