JavaScript에서 큰 숫자에 대한 과학적 표기법을 피하는 방법은 무엇입니까?
JavaScript는 문자열 컨텍스트에서 사용할 때 21자리 이상의 정수를 과학적 표기로 변환합니다.URL의 일부로 정수를 인쇄하고 있습니다.변환이 발생하지 않도록 하려면 어떻게 해야 합니까?
Number.toFixed가 있지만 숫자가 >= 1e21이고 최대 정밀도가 20이면 과학적 표기법을 사용합니다.그 외에는 직접 굴릴 수 있지만 지저분합니다.
function toFixed(x) {
if (Math.abs(x) < 1.0) {
var e = parseInt(x.toString().split('e-')[1]);
if (e) {
x *= Math.pow(10,e-1);
x = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
}
} else {
var e = parseInt(x.toString().split('+')[1]);
if (e > 20) {
e -= 20;
x /= Math.pow(10,e);
x += (new Array(e+1)).join('0');
}
}
return x;
}
반복n'-'n'-'n'-'n'-')을 사용합니다.(new Array(n+1)).join(str)
를 정의할 수 .String.prototype.repeat
러시아 농민 곱셈을 사용하고 대신 그것을 사용합니다.
이 답변은 과학적 표기법을 사용하지 않고 큰 숫자를 표시하는 질문의 맥락에만 적용되어야 합니다.그 외의 경우에는 BigNumber, Leemon의 BigInt 또는 BigInteger와 같은 BigInt 라이브러리를 사용해야 합니다.앞으로 새로운 네이티브 BigInt(참고: Leemon's가 아님)를 사용할 수 있을 것입니다.Crome과 이를 기반으로 한 브라우저(Chrome, 새로운 Edge [v79+], Brave), Firefox는 모두 지원되며 Safari의 지원이 진행 중입니다.
BigInt를 BigInt는 BigInt입니다.BigInt(n).toString()
예:
const n = 13523563246234613317632;
console.log("toFixed (wrong): " + n.toFixed());
console.log("BigInt (right): " + 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
수 마찬가지로8
때문에 여러분이 할 수 은, 의지할 수 있다면,BigInt
합니다.BigInt
★★★★
const n = BigInt("YourNumberHere");
예:
const n1 = BigInt(18014398509481985); // WRONG, will round to 18014398509481984
// before `BigInt` sees it
console.log(n1.toString() + " <== WRONG");
const n2 = BigInt("18014398509481985"); // RIGHT, BigInt handles it
console.log(n2.toString() + " <== Right");
오래된 질문인 건 알지만 최근에 활성화 된 것 같습니다.MDN to Locale String
const myNumb = 1000000000000000000000;
console.log( myNumb ); // 1e+21
console.log( myNumb.toLocaleString() ); // "1,000,000,000,000,000,000,000"
console.log( myNumb.toLocaleString('fullwide', {useGrouping:false}) ); // "1000000000000000000000"
옵션을 사용하여 출력 형식을 지정할 수 있습니다.
주의:
Number.toLocaleString()은 소수점 16자리 이후 반올림하기 때문에...
const myNumb = 586084736227728377283728272309128120398;
console.log( myNumb.toLocaleString('fullwide', { useGrouping: false }) );
...마지막으로...
586084736227728400000000000000000000000
의도한 결과에서 정확도가 중요한 경우 이는 바람직하지 않을 수 있습니다.
소수점 이하에서는 toFixed를 사용하고 regexp를 사용하여 후행 제로를 삭제할 수 있습니다.
Number(1e-7).toFixed(8).replace(/\.?0+$/,"") //0.000
또 하나의 가능한 해결책:
function toFix(i){
var str='';
do{
let a = i%10;
i=Math.trunc(i/10);
str = a+str;
}while(i>0)
return str;
}
규칙적인 표현들을 샅샅이 뒤지다.이것은 정밀도 문제도 없고 많은 코드도 아닙니다.
function toPlainString(num) {
return (''+ +num).replace(/(-?)(\d*)\.?(\d*)e([+-]\d+)/,
function(a,b,c,d,e) {
return e < 0
? b + '0.' + Array(1-e-c.length).join(0) + c + d
: b + c + d + Array(e-d.length+1).join(0);
});
}
console.log(toPlainString(12345e+12));
console.log(toPlainString(12345e+24));
console.log(toPlainString(-12345e+24));
console.log(toPlainString(12345e-12));
console.log(toPlainString(123e-12));
console.log(toPlainString(-123e-12));
console.log(toPlainString(-123.45e-56));
console.log(toPlainString('1e-8'));
console.log(toPlainString('1.0e-8'));
게시물의 질문은 e 표기법을 피하고 숫자를 일반 숫자로 지정하는 것이었습니다.
따라서 정확성을 잃지 않고 e(과학적) 표기법을 일반 숫자(분수의 경우 포함)로 변환하는 것이 모두 필요한 경우, 다음과 같은 방법을 사용하는 것을 피하는 것이 필수적입니다.Math
객체 및 기타 Javascript 숫자 메서드는 큰 숫자와 큰 부분을 처리할 때 반올림이 발생하지 않도록 합니다(이것은 항상 바이너리 형식의 내부 저장으로 인해 발생합니다).
다음 함수는 e(과학) 표기법 숫자를 정확도 손실 없이 큰 숫자와 큰 분수 모두를 처리하는 일반 숫자(분수 포함)로 변환합니다. 이는 숫자를 처리하거나 조작하는 데 내장된 산술 및 숫자 함수를 사용하지 않기 때문입니다.
이 함수는 정상 번호도 처리하므로 'e' 표기가 될 것으로 의심되는 번호를 함수에 전달하여 수정할 수 있습니다.
이 함수는 다른 로케일 소수점을 사용하여 동작해야 합니다.
94개의 테스트 케이스를 제공한다.
전자 알림 번호가 큰 경우 문자열로 번호를 전달합니다.
예:
eToNumber("123456789123456789.111122223333444455556666777788889999e+50");
// output:
"12345678912345678911112222333344445555666677778888999900000000000000"
eToNumber("123.456123456789123456895e-80");
// output:
"0.00000000000000000000000000000000000000000000000000000000000000000000000000000123456123456789123456895"
eToNumber("123456789123456789.111122223333444455556666777788889999e-50");
// output:
"0.00000000000000000000000000000000123456789123456789111122223333444455556666777788889999"
Javascript의 유효한 전자 알림 번호는 다음과 같습니다.
123e1 ==> 1230
123E1 ==> 1230
123e+1 ==> 1230
123.e+1 ==> 1230
123e-1 ==> 12.3
0.1e-1 ==> 0.01
.1e-1 ==> 0.01
-123e1 ==> -1230
/******************************************************************
* Converts e-Notation Numbers to Plain Numbers
******************************************************************
* @function eToNumber(number)
* @version 1.00
* @param {e nottation Number} valid Number in exponent format.
* pass number as a string for very large 'e' numbers or with large fractions
* (none 'e' number returned as is).
* @return {string} a decimal number string.
* @author Mohsen Alyafei
* @date 17 Jan 2020
* Note: No check is made for NaN or undefined input numbers.
*
*****************************************************************/
function eToNumber(num) {
let sign = "";
(num += "").charAt(0) == "-" && (num = num.substring(1), sign = "-");
let arr = num.split(/[e]/ig);
if (arr.length < 2) return sign + num;
let dot = (.1).toLocaleString().substr(1, 1), n = arr[0], exp = +arr[1],
w = (n = n.replace(/^0+/, '')).replace(dot, ''),
pos = n.split(dot)[1] ? n.indexOf(dot) + exp : w.length + exp,
L = pos - w.length, s = "" + BigInt(w);
w = exp >= 0 ? (L >= 0 ? s + "0".repeat(L) : r()) : (pos <= 0 ? "0" + dot + "0".repeat(Math.abs(pos)) + s : r());
L= w.split(dot); if (L[0]==0 && L[1]==0 || (+w==0 && +s==0) ) w = 0; //** added 9/10/2021
return sign + w;
function r() {return w.replace(new RegExp(`^(.{${pos}})(.)`), `$1${dot}$2`)}
}
//*****************************************************************
//================================================
// Test Cases
//================================================
let r = 0; // test tracker
r |= test(1, "123456789123456789.111122223333444455556666777788889999e+50", "12345678912345678911112222333344445555666677778888999900000000000000");
r |= test(2, "123456789123456789.111122223333444455556666777788889999e-50", "0.00000000000000000000000000000000123456789123456789111122223333444455556666777788889999");
r |= test(3, "123456789e3", "123456789000");
r |= test(4, "123456789e1", "1234567890");
r |= test(5, "1.123e3", "1123");
r |= test(6, "12.123e3", "12123");
r |= test(7, "1.1234e1", "11.234");
r |= test(8, "1.1234e4", "11234");
r |= test(9, "1.1234e5", "112340");
r |= test(10, "123e+0", "123");
r |= test(11, "123E0", "123");
// //============================
r |= test(12, "123e-1", "12.3");
r |= test(13, "123e-2", "1.23");
r |= test(14, "123e-3", "0.123");
r |= test(15, "123e-4", "0.0123");
r |= test(16, "123e-2", "1.23");
r |= test(17, "12345.678e-1", "1234.5678");
r |= test(18, "12345.678e-5", "0.12345678");
r |= test(19, "12345.678e-6", "0.012345678");
r |= test(20, "123.4e-2", "1.234");
r |= test(21, "123.4e-3", "0.1234");
r |= test(22, "123.4e-4", "0.01234");
r |= test(23, "-123e+0", "-123");
r |= test(24, "123e1", "1230");
r |= test(25, "123e3", "123000");
r |= test(26, -1e33, "-1000000000000000000000000000000000");
r |= test(27, "123e+3", "123000");
r |= test(28, "123E+7", "1230000000");
r |= test(29, "-123.456e+1", "-1234.56");
r |= test(30, "-1.0e+1", "-10");
r |= test(31, "-1.e+1", "-10");
r |= test(32, "-1e+1", "-10");
r |= test(34, "-0", "-0");
r |= test(37, "0e0", "0");
r |= test(38, "123.456e+4", "1234560");
r |= test(39, "123E-0", "123");
r |= test(40, "123.456e+50", "12345600000000000000000000000000000000000000000000000");
r |= test(41, "123e-0", "123");
r |= test(42, "123e-1", "12.3");
r |= test(43, "123e-3", "0.123");
r |= test(44, "123.456E-1", "12.3456");
r |= test(45, "123.456123456789123456895e-80", "0.00000000000000000000000000000000000000000000000000000000000000000000000000000123456123456789123456895");
r |= test(46, "-123.456e-50", "-0.00000000000000000000000000000000000000000000000123456");
r |= test(47, "-0e+1", "-0");
r |= test(48, "0e+1", "0");
r |= test(49, "0.1e+1", "1");
r |= test(50, "-0.01e+1", "-0.1");
r |= test(51, "0.01e+1", "0.1");
r |= test(52, "-123e-7", "-0.0000123");
r |= test(53, "123.456e-4", "0.0123456");
r |= test(54, "1.e-5", "0.00001"); // handle missing base fractional part
r |= test(55, ".123e3", "123"); // handle missing base whole part
// The Electron's Mass:
r |= test(56, "9.10938356e-31", "0.000000000000000000000000000000910938356");
// The Earth's Mass:
r |= test(57, "5.9724e+24", "5972400000000000000000000");
// Planck constant:
r |= test(58, "6.62607015e-34", "0.000000000000000000000000000000000662607015");
r |= test(59, "0.000e3", "0");
r |= test(60, "0.000000000000000e3", "0");
r |= test(61, "-0.0001e+9", "-100000");
r |= test(62, "-0.0e1", "-0");
r |= test(63, "-0.0000e1", "-0");
r |= test(64, "1.2000e0", "1.2000");
r |= test(65, "1.2000e-0", "1.2000");
r |= test(66, "1.2000e+0", "1.2000");
r |= test(67, "1.2000e+10", "12000000000");
r |= test(68, "1.12356789445566771234e2", "112.356789445566771234");
// ------------- testing for Non e-Notation Numbers -------------
r |= test(69, "12345.7898", "12345.7898") // no exponent
r |= test(70, 12345.7898, "12345.7898") // no exponent
r |= test(71, 0.00000000000001, "0.00000000000001") // from 1e-14
r |= test(72, 0.0000000000001, "0.0000000000001") // from 1e-13
r |= test(73, 0.000000000001, "0.000000000001") // from 1e-12
r |= test(74, 0.00000000001, "0.00000000001") // from 1e-11
r |= test(75, 0.0000000001, "0.0000000001") // from 1e-10
r |= test(76, 0.000000001, "0.000000001") // from 1e-9
r |= test(77, 0.00000001, "0.00000001") // from 1e-8
r |= test(78, 0.0000001, "0.0000001") // from 1e-7
r |= test(79, 1e-7, "0.0000001") // from 1e-7
r |= test(80, -0.0000001, "-0.0000001") // from 1e-7
r |= test(81, 0.0000005, "0.0000005") // from 1e-7
r |= test(82, 0.1000005, "0.1000005") // from 1e-7
r |= test(83, 1e-6, "0.000001") // from 1e-6
r |= test(84, 0.000001, "0.000001"); // from 1e-6
r |= test(85, 0.00001, "0.00001"); // from 1e-5
r |= test(86, 0.0001, "0.0001"); // from 1e-4
r |= test(87, 0.001, "0.001"); // from 1e-3
r |= test(88, 0.01, "0.01"); // from 1e-2
r |= test(89, 0.1, "0.1") // from 1e-1
r |= test(90, -0.0000000000000345, "-0.0000000000000345"); // from -3.45e-14
r |= test(91, -0, "0");
r |= test(92, "-0", "-0");
r |= test(93,2e64,"20000000000000000000000000000000000000000000000000000000000000000");
r |= test(94,"2830869077153280552556547081187254342445169156730","2830869077153280552556547081187254342445169156730");
if (r == 0) console.log("All 94 tests passed.");
//================================================
// Test function
//================================================
function test(testNumber, n1, should) {
let result = eToNumber(n1);
if (result !== should) {
console.log(`Test ${testNumber} Failed. Output: ${result}\n Should be: ${should}`);
return 1;
}
}
다음은 임의의 번호로 동작하는 짧은 메서드입니다.
Number.prototype.toFixedSpecial = function(n) {
var str = this.toFixed(n);
if (str.indexOf('e+') === -1)
return str;
// if number is in scientific notation, pick (b)ase and (p)ower
str = str.replace('.', '').split('e+').reduce(function(b, p) {
return b + Array(p - b.length + 2).join(0);
});
if (n > 0)
str += '.' + Array(n + 1).join(0);
return str;
};
console.log( 1e21.toFixedSpecial(2) ); // "1000000000000000000000.00"
console.log( 2.1e24.toFixedSpecial(0) ); // "2100000000000000000000000"
console.log( 1234567..toFixedSpecial(1) ); // "1234567.0"
console.log( 1234567.89.toFixedSpecial(3) ); // "1234567.890"
다음 솔루션에서는 매우 크고 작은 숫자에 대해 자동 지수 형식을 사용하지 않습니다.다음은 오류를 수정한 outis의 솔루션입니다.그것은 아주 작은 음수에는 효과가 없었다.
function numberToString(num)
{
let numStr = String(num);
if (Math.abs(num) < 1.0)
{
let e = parseInt(num.toString().split('e-')[1]);
if (e)
{
let negative = num < 0;
if (negative) num *= -1
num *= Math.pow(10, e - 1);
numStr = '0.' + (new Array(e)).join('0') + num.toString().substring(2);
if (negative) numStr = "-" + numStr;
}
}
else
{
let e = parseInt(num.toString().split('+')[1]);
if (e > 20)
{
e -= 20;
num /= Math.pow(10, e);
numStr = num.toString() + (new Array(e + 1)).join('0');
}
}
return numStr;
}
// testing ...
console.log(numberToString(+0.0000000000000000001));
console.log(numberToString(-0.0000000000000000001));
console.log(numberToString(+314564649798762418795));
console.log(numberToString(-314564649798762418795));
른른른 른른!! !!! !!!! !!!!!!
javascript!
수치 결과가 필요한 경우 1번 함수의 결과를 곱하면 됩니다!
function toNonExponential(value) {
// if value is not a number try to convert it to number
if (typeof value !== "number") {
value = parseFloat(value);
// after convert, if value is not a number return empty string
if (isNaN(value)) {
return "";
}
}
var sign;
var e;
// if value is negative, save "-" in sign variable and calculate the absolute value
if (value < 0) {
sign = "-";
value = Math.abs(value);
}
else {
sign = "";
}
// if value is between 0 and 1
if (value < 1.0) {
// get e value
e = parseInt(value.toString().split('e-')[1]);
// if value is exponential convert it to non exponential
if (e) {
value *= Math.pow(10, e - 1);
value = '0.' + (new Array(e)).join('0') + value.toString().substring(2);
}
}
else {
// get e value
e = parseInt(value.toString().split('e+')[1]);
// if value is exponential convert it to non exponential
if (e) {
value /= Math.pow(10, e);
value += (new Array(e + 1)).join('0');
}
}
// if value has negative sign, add to it
return sign + value;
}
from-exponential 모듈을 사용할 수 있습니다.가볍고 충분히 테스트되었습니다.
import fromExponential from 'from-exponential';
fromExponential(1.123e-10); // => '0.0000000001123'
질문:
number :0x68656c6c6f206f72656f
display:4.9299704811152646e+23
https://github.com/MikeMcl/bignumber.js 를 사용할 수 있습니다.
임의 정밀도 10진수 및 10진수 이외의 산술용 JavaScript 라이브러리입니다.
다음과 같습니다.
let ten =new BigNumber('0x68656c6c6f206f72656f',16);
console.log(ten.toString(10));
display:492997048111526447310191
.toPrecision
,.toFixed
, , , 등 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,.toString
에 보면.length
.
숫자를 반복하여 반올림할 수 있습니다.
// 지정된 인덱스에서 char를 대체하는 기능
String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
}
// 번호에 대한 루프가 시작됩니다.
var str = "123456789123456799.55";
var arr = str.split('.');
str = arr[0];
i = (str.length-1);
if(arr[1].length && Math.round(arr[1]/100)){
while(i>0){
var intVal = parseInt(str.charAt(i));
if(intVal == 9){
str = str.replaceAt(i,'0');
console.log(1,str)
}else{
str = str.replaceAt(i,(intVal+1).toString());
console.log(2,i,(intVal+1).toString(),str)
break;
}
i--;
}
}
이것은 입력에서 값을 얻어 17자리 미만의 숫자를 확장하고 지수를y x10으로 변환하는 데 사용되었습니다.
// e.g.
// niceNumber("1.24e+4") becomes
// 1.24x10 to the power of 4 [displayed in Superscript]
function niceNumber(num) {
try{
var sOut = num.toString();
if ( sOut.length >=17 || sOut.indexOf("e") > 0){
sOut=parseFloat(num).toPrecision(5)+"";
sOut = sOut.replace("e","x10<sup>")+"</sup>";
}
return sOut;
}
catch ( e) {
return num;
}
}
비슷한 답변이 몇 가지 있을 것 같은데 제가 생각해낸 게 있어요.
// If you're gonna tell me not to use 'with' I understand, just,
// it has no other purpose, ;( andthe code actually looks neater
// 'with' it but I will edit the answer if anyone insists
var commas = false;
function digit(number1, index1, base1) {
with (Math) {
return floor(number1/pow(base1, index1))%base1;
}
}
function digits(number1, base1) {
with (Math) {
o = "";
l = floor(log10(number1)/log10(base1));
for (var index1 = 0; index1 < l+1; index1++) {
o = digit(number1, index1, base1) + o;
if (commas && i%3==2 && i<l) {
o = "," + o;
}
}
return o;
}
}
// Test - this is the limit of accurate digits I think
console.log(1234567890123450);
주의: 이것은 javascript 산술 함수만큼 정확하고 for loop 앞의 행에 log10이 아닌 log10을 사용할 때 문제가 있습니다.이것은 1000을 000으로 표기하기 때문에, 어쨌든 사람들은 대부분 base-10을 사용할 것이기 때문에 log10으로 변경했습니다.
이 솔루션은 정확하지 않을 수도 있지만 여러 베이스로 숫자를 번역할 수 있고 쉼표 옵션도 포함되어 있어 자랑스럽습니다.
몇 년이 지난 건 알지만, 최근에 비슷한 문제에 대해 연구하고 있어서 해결책을 게시하고 싶었습니다.현재 받아들여지고 있는 답변은 지수 부분을 0으로 채우고, 저는 정확한 답을 찾으려고 합니다만, 일반적으로 JS의 부동소수점 정밀도의 한계 때문에 매우 큰 숫자에 대해서는 정확하지 않습니다.
이것은 에 유효합니다.Math.pow(2, 100)
값 disp7650600228229401496703205376을
function toFixed(x) {
var result = '';
var xStr = x.toString(10);
var digitCount = xStr.indexOf('e') === -1 ? xStr.length : (parseInt(xStr.substr(xStr.indexOf('e') + 1)) + 1);
for (var i = 1; i <= digitCount; i++) {
var mod = (x % Math.pow(10, i)).toString(10);
var exponent = (mod.indexOf('e') === -1) ? 0 : parseInt(mod.substr(mod.indexOf('e')+1));
if ((exponent === 0 && mod.length !== i) || (exponent > 0 && exponent !== i-1)) {
result = '0' + result;
}
else {
result = mod.charAt(0) + result;
}
}
return result;
}
console.log(toFixed(Math.pow(2,100))); // 1267650600228229401496703205376
표시만을 목적으로 하는 경우는, 반올림하기 전에 자리수로부터 배열을 작성할 수 있습니다.
var num = Math.pow(2, 100);
var reconstruct = [];
while(num > 0) {
reconstruct.unshift(num % 10);
num = Math.floor(num / 10);
}
console.log(reconstruct.join(''));
숫자보다 현악기로 작업을 해보니 잘 되는 것 같더라고요.Chrome에서만 테스트했지만 범용입니다.
function removeExponent(s) {
var ie = s.indexOf('e');
if (ie != -1) {
if (s.charAt(ie + 1) == '-') {
// negative exponent, prepend with .0s
var n = s.substr(ie + 2).match(/[0-9]+/);
s = s.substr(2, ie - 2); // remove the leading '0.' and exponent chars
for (var i = 0; i < n; i++) {
s = '0' + s;
}
s = '.' + s;
} else {
// positive exponent, postpend with 0s
var n = s.substr(ie + 1).match(/[0-9]+/);
s = s.substr(0, ie); // strip off exponent chars
for (var i = 0; i < n; i++) {
s += '0';
}
}
}
return s;
}
현재 과학적 표기법을 분해할 수 있는 고유 함수는 없다.다만, 이 목적을 위해서, 독자적인 기능을 작성할 필요가 있습니다.
이하에 나타냅니다.
function dissolveExponentialNotation(number)
{
if(!Number.isFinite(number)) { return undefined; }
let text = number.toString();
let items = text.split('e');
if(items.length == 1) { return text; }
let significandText = items[0];
let exponent = parseInt(items[1]);
let characters = Array.from(significandText);
let minus = characters[0] == '-';
if(minus) { characters.splice(0, 1); }
let indexDot = characters.reduce((accumulator, character, index) =>
{
if(!accumulator.found) { if(character == '.') { accumulator.found = true; } else { accumulator.index++; } }
return accumulator;
}, { index: 0, found: false }).index;
characters.splice(indexDot, 1);
indexDot += exponent;
if(indexDot >= 0 && indexDot < characters.length - 1)
{
characters.splice(indexDot, 0, '.');
}
else if(indexDot < 0)
{
characters.unshift("0.", "0".repeat(-indexDot));
}
else
{
characters.push("0".repeat(indexDot - characters.length));
}
return (minus ? "-" : "") + characters.join("");
}
Lodash를 사용해도 괜찮으시다면 To Safe가 필요합니다.정수()
_.toSafeInteger(3.2);
// => 3
_.toSafeInteger(Number.MIN_VALUE);
// => 0
_.toSafeInteger(Infinity);
// => 9007199254740991
_.toSafeInteger('3.2');
// => 3
Your JS.full Number 。를 들면, 「 」입니다.YourJS.fullNumber(Number.MAX_VALUE)
는 다음과 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
아주 적은 숫자에도 효과가 있습니다. YourJS.fullNumber(Number.MIN_VALUE)
값이 됩니다.0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
「 」 「 」 、 「 」 、 「 」 ( 「 」 ( 「 」NaN
또는Infinity
)로서undefined
.
여기 YourJS Console에서 테스트할 수 있습니다.
과학적 표기법을 정수로 변환하는 경우:
parseInt("5.645656456454545e+23", 10)
결과:5
function printInt(n) { return n.toPrecision(100).replace(/\..*/,""); }
몇 가지 문제가 있습니다.
- 0.9는 "0"으로 표시됩니다.
- -0.9는 "-0"으로 표시됩니다.
- 1e100은 "1"로 표시됩니다.
- 는 최대 ~1e99 =>의 숫자에 대해서만 동작합니다.더 큰 숫자에 대해서는 다른 상수를, 최적화에 대해서는 더 작은 상수를 사용합니다.
사용할 수 있습니다.number.toString(10.1)
:
console.log(Number.MAX_VALUE.toString(10.1));
주의: 이 기능은 현재 Chrome에서는 작동하지만 Firefox에서는 작동하지 않습니다.사양에 따르면 기수는 정수여야 하므로 신뢰할 수 없는 동작이 발생합니다.
oracle return scientic 표기법에서도 같은 문제가 있었습니다만, url에는 실제 번호가 필요했습니다.0을 빼서 PHP 트릭을 사용했는데 정확한 숫자가 나왔어요.
예를 들어 5.4987E7은 Val입니다.
newval = val - 0;
newval은 54987000과 같습니다.
언급URL : https://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript
'programing' 카테고리의 다른 글
if-statement 내부에 변수 값 할당 (0) | 2023.01.24 |
---|---|
MySQL에서 두 데이터 시간 간의 차이 계산 (0) | 2023.01.24 |
커스텀 리스트 Android의 아이템에 대한 클릭 문제 표시 (0) | 2023.01.24 |
Selenium - 페이지가 완전히 로드될 때까지 기다리는 방법 (0) | 2023.01.14 |
Python에서 '@=' 기호는 무엇입니까? (0) | 2023.01.14 |