Я вычитаю два очень больших числа друг из друга. Затем я пытаюсь разделить результат на 1000,0, чтобы преобразовать миллисекунды в секунды. По независящим от меня причинам я теряю десятичные дроби. Может кто-нибудь объяснить мне, почему?
let intervalMs = (interval.toMs - interval.fromMs) // Two big numbers
console.info(intervalMs) // Prints "43200000"
let intervalSec = intervalMs / 1000.0
console.info(intervalSec) // Prints "43200" ?!?!
Я также попытался «привести» intervalMs к числу:
let intervalMs = Number(interval.toMs - interval.fromMs)
Но результаты те же
@jonrsharpe - Не имеет отношения к этому вопросу, но в наши дни в JavaScript также есть BigInt
, а через пару лет (вероятно) будет какой-то "десятичный" тип. :-)
Number
возвращает его без изменений. 1000
, 1000.0
и 1000.00
— это абсолютно одинаковые числовые значения, просто записанные с разным количеством нулей после запятой.
какой ответ вы ожидаете?
Меня обманули. Это не целое число. Это просто напечатано как один... Плохо. Спасибо за ваш вклад, ребята.
Это потому, что десятичные дроби равны 0, попробуйте разделить на 3003, и вы получите десятичные дроби.
Чтобы получить 0 десятичных знаков, используйте:
console.info(intervalSec.toFixed(10));
JavaScript имеет только один тип числа. Зачем
43200000 / 1000
нужны более значащие цифры?