JavaScript преобразует большой INT в научную запись, когда число становится большим. Как я могу предотвратить это?
javascript
Крис
источник
источник
translate
преобразования, которое содержит координаты в научной нотации.Ответы:
Есть Number.toFixed , но он использует научную запись, если число> = 1e21 и имеет максимальную точность 20. Кроме этого, вы можете бросить свой собственный, но это будет грязно.
Выше используется дешевая -nn-easy строка repetition (
(new Array(n+1)).join(str)
). Вы можете определитьString.prototype.repeat
использование русского крестьянского умножения и использовать его вместо этого.Этот ответ должен применяться только к контексту вопроса: отображение большого числа без использования научных обозначений. Для всего остального вы должны использовать библиотеку BigInt , такую как BigNumber , Leemon's BigInt или BigInteger . В будущем должен быть доступен новый родной BigInt (примечание: не Leemon's); Chromium и браузеры на его основе ( Chrome , новый Edge [v79 +], Brave ) и Firefox имеют поддержку; Поддержка Safari продолжается.
Вот как бы вы использовали BigInt для этого:
BigInt(n).toString()
Пример:
Показать фрагмент кода
Осторожно , однако, что любое целое число выводе как число JavaScript (не BigInt) , что больше , чем 15-16 цифр ( в частности, больше , чем
Number.MAX_SAFE_INTEGER + 1
[9.007.199.254.740.992]) , может быть быть закруглены, так как тип номера в JavaScript (IEEE-754 с двойной точностью с плавающей точкой) не может точно содержать все целые числа за этой точкой. ПосколькуNumber.MAX_SAFE_INTEGER + 1
он работает с коэффициентами, кратными 2, то он больше не может содержать нечетные числа (и, аналогично, с 18 014 398 509 481 984 он начинает работать с коэффициентами, кратными 4, затем 8, 16, ...).Следовательно, если вы можете рассчитывать на
BigInt
поддержку, выведите свой номер в виде строки, которую вы передаетеBigInt
функции:Пример:
Показать фрагмент кода
источник
Math.abs
. Спасибо за хедз-ап.toFixed(Number.MAX_VALUE) == Number.MAX_VALUE
должен вернуть true тогда, но это не так ...Я знаю, что это старый вопрос, но в последнее время показывает активный. MDN toLocaleString
Вы можете использовать параметры для форматирования вывода.
Примечание:
Number.toLocaleString () округляет после 16 десятичных знаков, так что ...
... возвращается ...
586084736227728400000000000000000000000
Это, возможно, нежелательно, если точность важна в намеченном результате.
источник
js console.log( myNumb.toLocaleString('fullwide', { useGrouping: true, maximumSignificantDigits:6}) );
Для небольшого числа, и вы знаете, сколько десятичных разрядов вы хотите, вы можете использовать toFixed, а затем использовать регулярное выражение, чтобы удалить конечные нули.
источник
(1000).toFixed(0).replace(/\.?0+$/,"") // 1, not 1000
еще одно возможное решение:
источник
Number.MAX_SAFE_INTEGER
, вероятно, страдает этой проблемой.Вот мой короткий вариант
Number.prototype.toFixed
метода, который работает с любым числом:источник
Number
. Если выNumber
приведете первое к a , вы увидите, что они абсолютно равны: jsfiddle.net/qd6hpnyx/1 . Вы можете забрать обратно свой голос:P
.0
на пустую строку.console.log(2.2e307.toFixedSpecial(10))
. Я имею в виду ... Я получаю несколько конечных нулей. Во всяком случае, от голосования, потому что это кажется самым близким к тому, что мне нужно.Следующее решение обходит автоматическое экспоненциальное форматирование для очень больших и очень маленьких чисел. Это наше решение с исправлением: оно не работало для очень маленьких отрицательных чисел.
источник
Ответы других не дают вам точного числа!
Эта функция точно вычисляет желаемое число и возвращает его в строке, чтобы предотвратить его изменение с помощью javascript!
Если вам нужен числовой результат, просто умножьте результат функции на номер один!
источник
Использование
.toPrecision
,.toFixed
и т.д. Вы можете подсчитать количество цифр в вашем номере путем преобразования его в строку с.toString
потом , глядя на ее.length
.источник
(2e64).toString()
вернется"2e+64"
, так.length
что бесполезно.Это то, что я использовал, чтобы взять значение из ввода, расширив числа менее 17 цифр и преобразовав экспоненциальные числа в x10 y
источник
Вы можете зациклить число и достичь округления
источник
Я попытался работать со строковой формой, а не с числом, и это, похоже, сработало. Я проверял это только на Chrome, но он должен быть универсальным:
источник
Я думаю, что может быть несколько похожих ответов, но вот что я придумал
Примечание: это так же точно, как математические функции javascript и имеет проблемы при использовании log вместо log10 в строке перед циклом for; он будет записывать 1000 в base-10 как 000, поэтому я изменил его на log10, потому что люди в основном будут использовать base-10 в любом случае.
Возможно, это не очень точное решение, но я с гордостью могу сказать, что оно может успешно переводить числа между базами и поставляется с опцией для запятых!
источник
Ваш вопрос:
Вы можете использовать это: https://github.com/MikeMcl/bignumber.js
как это:
источник
Я знаю, что это много лет спустя, но недавно я работал над аналогичной проблемой и хотел опубликовать свое решение. В настоящее время принятый ответ дополняет часть экспоненты нулями, и моя попытка найти точный ответ, хотя в целом он не совсем точен для очень больших чисел из-за ограничения JS в точности с плавающей запятой.
Это работает
Math.pow(2, 100)
, возвращая правильное значение 1267650600228229401496703205376.источник
toFixed(Number.MAX_VALUE) == Number.MAX_VALUE
с некоторыми проблемами:
источник
Вырвать регулярные выражения. Это не имеет проблем с точностью и не очень много кода.
источник
Если вы просто делаете это для отображения, вы можете построить массив из цифр, прежде чем они будут округлены.
источник
В настоящее время нет нативной функции растворения научной нотации. Однако для этого вы должны написать свой собственный функционал.
Вот мой:
источник
Вы можете использовать из экспоненциального модуля. Он легкий и полностью протестирован.
источник
Вы также можете использовать YourJS.fullNumber. Например,
YourJS.fullNumber(Number.MAX_VALUE)
приводит к следующему:179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Это также работает для действительно небольших чисел.
YourJS.fullNumber(Number.MIN_VALUE)
возвращает это:0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
Важно отметить, что эта функция всегда будет возвращать конечные числа как строки, но будет возвращать неконечные числа (например,
NaN
илиInfinity
) какundefined
.Вы можете проверить это в консоли YourJS здесь .
источник
Вы можете использовать
number.toString(10.1)
:Примечание. В настоящее время это работает в Chrome, но не в Firefox. Спецификация говорит, что основание должно быть целым числом, так что это приводит к ненадежному поведению.
источник
10.1
или10
ничего не эквивалентно.У меня была та же проблема с оракулом, возвращающим научную нотацию, но мне нужно было фактическое число для URL. Я просто использовал трюк PHP, вычитая ноль, и я получил правильное число.
например 5.4987E7 является val.
newval теперь равен 54987000
источник