toPrecision суммирует конечные нули после десятичной запятой до общего числа - PullRequest
0 голосов
/ 14 декабря 2018

После долгих поисков я задаю этот вопрос.

У меня есть миссия ограничить число всего 8 цифрами.toPrecision работает, как и предполагалось, за исключением:

Некоторые тестовые случаи:

  1. 4828.39019785 -> 4828.3902 (предназначено)
  2. 0.39019785 -> 0.39019785 (хотя возвращается всего 9цифры, но это вроде работает)
  3. 0,0039019785 -> 0,0039019785 (не предназначено, возвращая 11 цифр)

Кажется, что toPrecision не работает, как предполагалось, т.е. возвращает точныйномер, который мы хотели.Он складывает нули перед десятичной дробью и конечные нули после десятичной дроби в общее количество цифр.

Мое намерение:

0,39019785 -> 0,3901978 (ровно 8 цифр, включая 0) 0,0039019785 -> 0,0039019 (ровно 8 цифр, включая 3 нуля)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

var num1 = 0.39019785;
var num2 = 0.0039019785;

const exactPrecision = (number, precision) => number.toPrecision(precision).replace(new RegExp("((\\d\\.*){"+precision+"}).*"), '$1');

console.log(exactPrecision(num1, 8))
console.log(exactPrecision(num2, 8))

Надеюсь, это поможет!

toPrecision не делает то, что вы хотите, когда ведущие 0, поэтому я создал функцию, которая избавляется отчто потом не нужно.

0 голосов
/ 14 декабря 2018

Вы можете использовать функцию toPrecision().Например:

console.log(Number(1).toPrecision(8));

Это даст вам "1.0000000"

...