.toFixed(1) не работает с десятичным числом 8.333333333333334
В настоящее время я пишу расчет рабочего времени с указанием времени входа и времени, чтобы показать рабочий час с десятичной дробью с 1 баллом. В моем случае я использовал.toFixed(1) и все остальное время работает хорошо, но когда время в 09:10, а время в 17:30 .. Это результат, показанный как 8.333333333333334. .toFixed(1) не работает с этим десятичным числом. Как я должен это сделать.
Вот мой код
var time_in = $(elm).closest('tr').find('.time_in').text();
var time_out = $(elm).closest('tr').find('.time_out').text();
var working_time = (new Date("1970-1-1 " + time_out) - new Date("1970-1-1 " + time_in)) / 1000 / 60 / 60 ;
alert(working_time);
var total_work_hour = working_time.toFixed(1) - 1; //get fixed decimal number and minus 1 for lunch time.
var w_time = $(elm).closest('tr').find('.work_time');
w_time.text(total_work_hour);
1 ответ
Когда вы вычитаете 1 из результата 8.333333333333334.toFixed(1)
(какой Javascript позволяет вам делать, хотя Number#toFixed
возвращает строку), результат не равен 7,3, потому что машина использует двоичную арифметику с плавающей запятой. Например:
0.1 + 0.2 // -> 0.30000000000000004
Чтобы обойти это, сделайте всю свою арифметику, а затем позвоните .toFixed(1)
:
var total_work_hour = (working_time - 1).toFixed(1);