Как получить процент в день для большей точности из JavaScript MojjasasHours ()? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть такая таблица:

enter image description here

Сумма столбца в процентах должна быть 100%, но я получаю 100,01%.

Вот мой код:

var hourSlow = $("#input-me-slow").val();
var slowTime = moment.duration(hourSlow).asHours();
// slow time return 2.1666666666666665

var hourIdle = $("#input-me-idle").val();
var idleTime = moment.duration(hourIdle).asHours()
// idle time return 1

var hourEco = $("#input-me-eco").val();
var ecoTime = moment.duration(hourEco).asHours();
// ecoTime return 20.166666666666668

var hourSpeed = $("#input-me-speed").val();
var speedTime = moment.duration(hourSpeed).asHours();
// speedTime return 0.6666666666666666

var fTime = "24:00"
var dfTime = moment.duration(fTime).asHours();
// dfTime return 24

var totalTime = dfTime-speedTime-ecoTime-slowTime-idleTime;
// totalTime return -2.220446049250313e-15


// Here for display it to table, the problem is here
var fPercent = toHour(fullTime); //return 2.78
var ePercent = toHour(ecoTime); //return 84.03
var sPercent = toHour(slowTime); //return 9.03
var iPercent = toHour(idleTime); //return 4.17
$("#me_fullpercen").text(addCommas(fPercent));
$("#me_ecopercen").text(addCommas(ePercent));
$("#me_slowpercen").text(addCommas(sPercent));
$("#me_idlepercen").text(addCommas(iPercent));

// here the function of toHour (I dont know maybe the problem is here)
function toHour(num) {
    var result = (num / 24) * 100;
    return result ;
}

Я бы не стал округлять процент до 100%, так как это было бы менее точно.

Как мне сделать мойпроцент 100% вместо 100,01%?

1 Ответ

0 голосов
/ 18 октября 2018

Это распространенная проблема, и независимо от того, насколько точной вы хотите быть, компьютеру нужно будет округлять числа с повторяющимися десятичными знаками в какой-то момент.Вот некоторые сообщения, которые имеют дело с этим:

В этих сообщениях вы можете прочитать о многих сложных способах приблизиться к 100%, но в принципе нет правильного способа сделать это - когда все кипятитсявниз это все еще будет оценка - не совсем точная, потому что мы имеем дело с неточными числами.Это просто природа зверя.

Ваша программа будет округлять числа неправильно, потому что это компьютер, и он не интеллектуален.

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

Добавить сноску

На любом пути, который вы выберете, вы, вероятно, в конечном итоге добавите сноску, объясняющую эту проблему в любом случае.Примерно так:

* Из-за округления эти значения могут не доходить до 100%.

...