.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);
Другие вопросы по тегам