JavaScript에서 많은 수의 과학적 표기법을 피하는 방법은 무엇입니까?


183

JavaScript는 숫자가 커지면 큰 INT과학적 표기법으로 변환합니다 . 이 문제가 발생하지 않도록하려면 어떻게해야합니까?


1
1E21을 '1000000000000000000000'으로 표시 하시겠습니까? 번호가 표시되는 방법 또는 저장 방법에 관심이 있습니까?
outis

3
표시 방법에 대해 걱정합니다. document.write (myvariable) 명령이 있습니다
chris

1
URL의 일부로 숫자가 필요합니다
chris

3
@outis : 인간 사용자 만이 숫자를 읽고 싶은 것은 아닙니다. translate과학적 표기법으로 좌표가 포함 된 변환이 발생하면 D3에서 예외가 발생합니다 .
또는 매퍼

2
특정 크기까지의 숫자를 다룰 때 여전히 사용됩니다. 과학적 표기법은 역시 과학적 표기법을 모르는 사용자에게는 읽기 어려울 것입니다.
hippietrail

답변:


110

있다 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;
}

위의 저렴하고 쉬운 문자열 반복 ( (new Array(n+1)).join(str))을 사용합니다. String.prototype.repeatRussian Peasant Multiplication을 사용하여 정의 하고 대신 사용할 수 있습니다.

이 답변은 질문의 맥락에만 적용되어야합니다 : 과학적 표기법을 사용하지 않고 많은 수를 표시합니다. 다른 경우 에는 BigNumber , Leemon 's BigInt 또는 BigInteger 와 같은 BigInt 라이브러리를 사용해야합니다 . 앞으로는 새로운 기본 BigInt (참고 : Leemon이 아닌)를 사용할 수 있어야합니다. ChromeChrome 기반 브라우저 ( Chrome , 새로운 Edge [v79 +], Brave ) 및 Firefox는 모두 지원합니다. Safari의 지원이 진행 중입니다.

BigInt를 사용하는 방법은 다음과 같습니다. BigInt(n).toString()

예:

조심 이상의 15 ~ 16 자리의 자바 스크립트 번호 (안에서 BigInt) 등의 정수을 출력 (특히,보다 큰 것을,하지만, Number.MAX_SAFE_INTEGER + 1[9,007,199,254,740,992가), 자바 스크립트의 숫자 형 때문에 (IEEE-754 배정 밀도 둥근 될 수 있습니다 부동 소수점)은 해당 지점 이상의 모든 정수를 정확하게 보유 할 수 없습니다. 현재 Number.MAX_SAFE_INTEGER + 12의 배수로 작동하므로 더 이상 홀수를 가질 수 없습니다 (그리고 유사하게 18,014,398,509,481,984에서는 4, 8, 16, ...의 배수로 작동하기 시작합니다).

따라서 BigInt지원에 의존 할 수 있으면 BigInt함수에 전달하는 문자열로 숫자를 출력하십시오 .

const n = BigInt("YourNumberHere");

예:


귀하의 솔루션은 wolframalpha와 2 ^ 1000의 결과가 매우 다릅니다. 어떤 포인터?
셰인 Reustle

4
@Shane :이 Q & A는 부동 소수점 숫자를 10 진수 정수로 표시하는 것과 관련이 있으며 부동 소수점 형식으로 표현할 수없는 숫자 (10 진수로 변환 할 때 발생 함)는 다루지 않습니다. 마지막 줄에서 언급했듯이 JS bigint 라이브러리 가 필요합니다 .
outis

1
@ PeterOlson : 내가 빠져있는 것처럼 보입니다 Math.abs. 헤드 업 주셔서 감사합니다.
outis

1
toFixed(Number.MAX_VALUE) == Number.MAX_VALUE그때 사실을 반환해야하지만, 그렇지 않습니다 ...
manonthemat

3
사실이 코드는 그대로 아주 작은 음의 숫자하지 작업을 수행합니다에서는 toFixed (-1E-20) -> "0.0000000000000000000.09999999999999999"
davidthings에게

44

나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에 활성화되어 있음을 보여줍니다. MDN에서 LocaleString

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

의도 한 결과에 정확성이 중요한 경우에는 바람직하지 않습니다.


2
이것은 완벽한 답변입니다.
Aria

이것은 PhantomJS 2.1.1에서 작동하지 않습니다-여전히 과학적 표기법으로 끝납니다. Chrome에서는 괜찮습니다.
Egor Nepomnyaschih 2014 년

1
이것은 매우 작은 소수에 대해서는 작동하지 않는 것 같습니다. var myNumb = 0.0000000001; console.log (myNumb.toLocaleString ( 'fullwide', {useGrouping : false}));
eh1160

매우 작은 10 진수를 형식화하기 위해 maximumSignificantDigits 옵션 (최대 21)을 설정할 수 있습니다.js console.log( myNumb.toLocaleString('fullwide', { useGrouping: true, maximumSignificantDigits:6}) );
Sir. MaNiAl

20

소수의 경우 원하는 소수를 알고 있으면 toFixed를 사용하고 정규 표현식을 사용하여 후행 0을 제거 할 수 있습니다.

Number(1e-7).toFixed(8).replace(/\.?0+$/,"") //0.000

26
문자 그대로 많은 수를 요구
swyx

1
toFixed 호출의 인수로 0을 피하도록주의하십시오. 중요한 0을 지우는 결과를 (1000).toFixed(0).replace(/\.?0+$/,"") // 1, not 1000
낳을 것입니다

15

하나 더 가능한 해결책 :

function toFix(i){
 var str='';
 do{
   let a = i%10;
   i=Math.trunc(i/10);
   str = a+str;
 }while(i>0)
 return str;
}

7
예를 들어 31415926535897932384626433832795는 31415926535897938480804068462624
zero_cool

긍정적이지는 않지만 JavaScript가 많은 수를 처리하는 방법과 관련이 있습니다.
zero_cool

@domsson 기본적으로 IEEE 부동 소수점 숫자 산술이 적용되기 때문입니다. Javascript의 숫자는 실제로 "소수"뿐만 아니라 부동 소수점 숫자로 표시되며 기본 "정수 정확한 유형"은 없습니다. 자세한 내용은 여기를 참조하십시오 : medium.com/dailyjs/javascripts-number-type-8d59199db1b6
Pac0

@zero_cool 이보다 큰 숫자 Number.MAX_SAFE_INTEGER는이 문제가 발생할 수 있습니다.
Pac0

10

다음은 Number.prototype.toFixed임의의 숫자와 작동하는 짧은 변형 방법입니다.

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(p, b) {
    return p + Array(b - p.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"


Number.MAX_VALUE.toFixedSpecial (2)를 Number.MAX_VALUE와 비교하면 값이 같지 않음을 알 수 있습니다.
manonthemat

4
@manonthemat 물론 첫 번째 문자열 은 형식화 된 문자열 이고 두 번째 문자열 은이므로 동일하지 않습니다 Number. 첫 번째 것을 a로 캐스팅하면 jsfiddle.net/qd6hpnyx/1완전히 동일한 Number것을 알 수 있습니다 . downvote를 되 찾을 수 있습니다:P
VisioN

충분히 공평합니다 .... 당신이 당신의 답변을 편집하지 않는 한, 나는 할 수없는 것으로 나타났습니다.
manonthemat

후행 .0을 빈 문자열로 바꾸는 것이 좋습니다.
vsync

시도 할 때 다소 이상한 가치가 console.log(2.2e307.toFixedSpecial(10))있습니다. 내 말은 ... 몇 개의 후행 0을 얻습니다. 어쨌든 이것은 내가 필요한 것에 가장 가깝게 보이기 때문에 상향 조정합니다.
peter.petrov

6

다음 솔루션은 매우 크고 작은 숫자에 대한 자동 지수 형식을 무시합니다. 이것은 버그 수정 이있는 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));


1
numberToString (0.0000002) "0.00000019999999999999998"
raphadko 2016 년

1
@raphadko 그것은 악명 높은 자바 부동 소수점 정밀도 문제입니다. 이것은 JS에서 숫자를 사용할 때 또 다른 고통입니다 ... 예를 들어 stackoverflow.com/questions/1458633/…
user56reinstatemonica8

3

다른 사람들의 대답은 당신에게 정확한 숫자를 제공하지 않습니다!
이 함수는 원하는 숫자를 정확하게 계산하고 문자열로 반환하여 자바 스크립트에 의해 변경되지 않도록합니다!
수치 결과가 필요한 경우 함수 결과에 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;
}

이 코드에만 응답하는 일부 추가 정보가 유용 할 것입니다.
Pyves

함수에 주석이 추가되었습니다.

2

사용 .toPrecision, .toFixed등 당신과 함께 문자열로 변환하여 전화 번호의 자릿수를 믿을 수있는 .toString다음의보고 .length.


어떤 이유로 toPrecision이 작동하지 않습니다. window.examplenum = 1352356324623461346을 시도한 다음 alert (window.examplenum.toPrecision (20))이라고하면 경고가 표시되지 않습니다.
chris

실제로 과학적 표기법을 보여주는 팝업이 나타나고 다른 경우에는 전혀 나타나지 않습니다. 내가 뭘 잘못하고 있죠?
chris

18
제안 방법 중 어느 것도 큰 (또는 작은) 숫자에는 작동하지 않습니다. (2e64).toString()반환 "2e+64"하므로 .length쓸모가 없습니다.
CodeManX

2

이것은 입력에서 값을 가져 와서 17 자리 미만의 숫자를 확장하고 지수를 x10 y 로 변환하는 데 사용했습니다.

// 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;
  }
}

1

당신은 숫자를 반복하고 반올림을 달성 할 수 있습니다

// 주어진 인덱스에서 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--;
 }
}

1

숫자가 아닌 문자열 형식으로 작업을 시도했지만 작동하는 것 같습니다. 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;
}

1

비슷한 대답이 몇 가지있을 수 있지만 여기에 내가 생각해 낸 것이 있습니다.

// 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);

참고 : 이것은 자바 스크립트 수학 함수만큼 정확하며 for 루프 앞 줄에 log10 대신 log를 사용할 때 문제가 있습니다. 사람들은 어쨌든 대부분 10을 사용하기 때문에 10을 1000으로 기록합니다.

이것은 매우 정확한 해결책은 아니지만 기본적으로 숫자를 성공적으로 번역 할 수 있으며 쉼표 옵션이 제공된다고 자랑스럽게 생각합니다!


1

당신의 질문 :

number :0x68656c6c6f206f72656f
display:4.9299704811152646e+23

이것을 사용할 수 있습니다 : https://github.com/MikeMcl/bignumber.js

임의 정밀도 10 진수 및 비소수 산술을위한 JavaScript 라이브러리.

이처럼 :

let ten =new BigNumber('0x68656c6c6f206f72656f',16);
console.log(ten.toString(10));
display:492997048111526447310191

자, bignumber.js는 15 자리 이상의 유효 숫자를 넘어 설 수 없습니다.
Michael Heuberger

0

몇 년 후인 것을 알고 있지만 최근에 비슷한 문제를 해결하고 있었고 솔루션을 게시하고 싶었습니다. 현재 허용되는 답변은 지수 부분을 0으로 채우고 정확한 답변을 찾으려고 시도하지만 일반적으로 부동 소수점 정밀도의 JS 한계 때문에 매우 큰 숫자에는 완벽하게 정확하지는 않습니다.

이것은 Math.pow(2, 100)1267650600228229401496703205376의 올바른 값을 반환하여 작동합니다 .

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


@Oriol-네, 맞습니다. 이전에 시도한 모든 것이 다른 요인으로 인해 그 방식으로 해결 된 것 같습니다. 내 대답에서 그 작은 메모를 제거합니다.
andi

1
작동하지 않습니다 :toFixed(Number.MAX_VALUE) == Number.MAX_VALUE
manonthemat

0
function printInt(n) { return n.toPrecision(100).replace(/\..*/,""); }

몇 가지 문제가 있습니다.

  • 0.9는 "0"으로 표시됩니다
  • -0.9가 "-0"으로 표시됩니다
  • 1e100이 "1"로 표시됩니다
  • ~ 1e99까지의 숫자에 대해서만 작동합니다 => 더 큰 숫자에는 다른 상수를 사용하십시오. 또는 최적화를 위해 더 작습니다.

네, 몇 가지 문제가 있습니다.
Adam Leggett

0

정규식 파열. 이것은 정밀도 문제가 없으며 많은 코드가 아닙니다.

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));


-1

표시하기 위해 방금 수행하는 경우 숫자를 반올림하기 전에 숫자로 배열을 만들 수 있습니다.

var num = Math.pow(2, 100);
var reconstruct = [];
while(num > 0) {
    reconstruct.unshift(num % 10);
    num = Math.floor(num / 10);
}
console.log(reconstruct.join(''));

그러면 정답이 반환되지만 시간이 많이 걸리고 실행 시간이 초과 될 수 있습니다.
Hannah 5

-1

현재 과학적 표기법을 녹이는 기본 기능은 없습니다. 그러나이 목적을 위해서는 고유 한 기능을 작성해야합니다.

여기, 내 것이요:

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("");
}

이것은 실제로 큰 숫자에 실패합니다. 나는 2830869077153280552556547081187254342445169156730를 시도하고 2830869077153280500000000000000000000000000000000
콜백

-1

기하 급수적 모듈을 사용할 수 있습니다 . 가볍고 완벽하게 테스트되었습니다.

import fromExponential from 'from-exponential';

fromExponential(1.123e-10); // => '0.0000000001123'

-1

YourJS.fullNumber를 사용할 수도 있습니다. 예를 들어 YourJS.fullNumber(Number.MAX_VALUE)다음과 같은 결과가 나타납니다. 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

정말 작은 숫자에도 적용됩니다. YourJS.fullNumber(Number.MIN_VALUE)이것을 돌려줍니다 : 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005

이 함수는 항상 유한 숫자를 문자열로 반환하지만 무한 수가 아닌 숫자 (예 : NaN또는 Infinity) 는로 반환 undefined합니다.

YourJS Console 에서 테스트 할 수 있습니다 .


-3

당신은 사용할 수 있습니다 number.toString(10.1):

console.log(Number.MAX_VALUE.toString(10.1));

참고 : 현재 Chrome에서는 작동하지만 Firefox에서는 작동하지 않습니다. 사양에 따르면 기수가 정수 여야하므로 신뢰할 수없는 동작이 발생합니다.


도대체 무엇을 하는가? 기수 10.1?
joniba

작동하지 않습니다. ES5부터는 인수에 ToInteger를 사용하는 구현이 필요합니다. 따라서 또는 아무것도 사용 10.1 하거나 10동등한 것은 없습니다.
Oriol

그렇습니다. 실제로 최근에 작동이 중단되었습니다. 슬프지만이 대답은 이제 관련이 없습니다.
Zambonifofex

-6

오라클이 과학 표기법을 반환하는 것과 동일한 문제가 있었지만 URL의 실제 숫자가 필요했습니다. 방금 0을 빼서 PHP 트릭을 사용했으며 올바른 숫자를 얻습니다.

예를 들어 5.4987E7은 val입니다.

newval = val - 0;

newval은 이제 54987000과 같습니다.


2
이것은 효과가 없습니다. 5.4987E7의 지수는 21보다 작으므로 문자열로 변환 할 때 상관없이 정수로 표시됩니다. (5.4987E21-0) .toString () => "5.4987e + 21"
Dwight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.