У меня есть несколько дел, которые мне нужно охватить при делении чисел.
Правила:
- Отдел должен всегда возвращать 2 десятичных знака
- Там не должно быть округления.
Я использую логику:
function divideAndReturn (totalPrice, runningTime) {
let result;
let totalPriceFloat = parseFloat(totalPrice).toFixed(2);
let runningTimeNumber = parseInt(runningTime, 10); // Always a round number
result = totalPriceFloat / runningTimeNumber; // I do not need rounding. Need exact decimals
return result.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]; // Preserve only two decimals, avoiding rounding up.
}
Работает, как и ожидалось, для следующего случая:
let totalPrice = '1000.00';
let runningTime = '6';
// result is 166.66
Это также работает для этого случая:
let totalPrice = '100.00';
let runningTime = '12';
// Returns 8.33
Но для этого случая он не работает должным образом:
let totalPrice = '1000.00';
let runningTime = '5';
// Returns 200. Expected is 200.00
Кажется, когда я делю круглые числа, само деление удаляет .00 десятичных знаков
Если есть исправление моей логики, пожалуйста, пролите немного света. Или, если есть лучший способ покрыть это, я тоже счастлив.
PS. Числа поступают из базы данных и всегда изначально являются строками.