Как 0.12
показывает, результат очень немного меньше 0.115
. Это происходит потому , что 0.11
и 0.12
не может быть представлено с совершенной точностью с использованием плавающей точкой-номер.
Когда вы не хотите иметь дело с ошибкой с плавающей запятой, часто проще работать с целыми числами. Малые целые числа представлены точно числами с плавающей запятой.
Вы можете умножить на 100 до и до раунда, чтобы ваши числа были целыми и разделились только после получения окончательного результата:
var a = Math.round(100 * parseFloat("0.12")) // 12
var b = Math.round(100 * parseFloat("0.11")) // 11
var mid = (a + b) / 2 // 11.5.
// 0.5 can be represented exactly in floating point for small numbers.
var midRound = (Math.round(mid) / 100).toFixed(2) // "0.12"