ProgramingTip

mysql에 금액 저장

bestdevel 2020. 11. 29. 12:02
반응형

mysql에 금액 저장


3.50을 mysql 테이블에 저장하고 싶습니다. 나는 그것을 저장하는 플로트가 3.50이 아닌 3.5로 저장됩니다. 후행 0을 갖도록 어떻게 할 수 있습니까?


값을 부동 소수점으로 저장하지 말고 DECIMAL 또는 NUMERIC 유형을 사용하십시오.

MySQL 숫자 유형에 대한 문서

수정 및 설명 :

Float 값은 다음이 제한되어 있기 때문에 반올림 오류에 어려움이 있기 때문에 10.00 대신 9.99 만 얻도록 신경 쓰지 않는 한 문제가없는 고정 소수점 숫자 DECIMAL / NUMERIC을 사용합니다.


계산시 반올림 오류가 보관 수 있으므로 일반적으로 돈을 부동 소수점으로 저장하는 것이 좋지 않습니다.

대신 DECIMAL (10,2) 사용을 고려하십시오.


3.5, 3.50 또는 3.500으로 저장하는 것이 중요합니까?

정말 중요한 것은 db에서 검색된 후 어떻게 표시되어 있습니다.

아니면 여기에 뭔가 빠졌나요?

또한 부동 소수점을 사용하지 말고 소수점을 사용하십시오. Float에는 모든 종류의 반올림 문제가 있습니다.


값을 저장하려는 경우 DECIMAL ( 10,2 ) 필드를 사용하고 FORMAT

함수를 사용할 수 있습니다 .

SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1

"3.50"을 데이터베이스에 저장하려는 이유는 무엇입니까? 3.5 == 3.50 == 3.5000 데이터베이스에 관한 한.

그림 / 날짜 / 등의 표현과 서식은 데이터베이스가 아닌 응용 프로그램에서 수행해야합니다.


DECIMAL 또는 NUMERIC 유형을 사용하는 경우 예를 들어 DECIMAL (18, 2)로 선언 할 수 있습니다. 이는 0이 2 자리 소수를 강제합니다. 예상되는 큰 값에 따라 첫 번째 매개 변수의 값을 사용합니다.


바이너리는 부족한 수의 비트만으로 부동 소수점을 얻을 수 없습니다. 너무 많은 데이터 규모가 실제로 실제로 변환 오류입니다. 여기에 예제를 제공하는 매뉴얼이 있습니다.

이 작업은 브라우저에서 볼 수있는 코드 조각에서 직접 확인하십시오.

<script>

    var floatSum = 0;

    // add 0.1 to floatSum 10 times
    for (var i=0; i<10; i++) {
        floatSum += 0.1;
    }

    // if the repetative adding was correct, the floatSum should be equal to 1
    var expectedSum = 10*0.1; // 1

    // you can see that floatSum does not equal 1 because of floating point error
    document.write(expectedSum + " == " + floatSum + " = " + (expectedSum==floatSum) + "<br />");


    // --- using integers instead ---
    // Assume the example above is adding £0.10 ten times to make £1.00
    // With integers, we will use store money in pence (100 pence (also written 100p) in £1)

    var intSum = 0;

    // add 0.1 to floatSum 10 times
    for (var i=0; i<10; i++) {
        intSum += 10;
    }

    // if the repetative adding was correct, the floatSum should be equal to 1
    var expectedSum = 10*10; // 100

    // you can see that floatSum does not equal 1 because of floating point error
    document.write(expectedSum + " == " + intSum + " = " + (expectedSum==intSum) + "<br />");
    document.write("To display as &pound; instead of pence, we can divide by 100 (presentation only) : &pound;" + intSum/100 + "<br />");
</script>

참고 URL : https://stackoverflow.com/questions/2251290/storing-money-amounts-in-mysql

반응형