mysql에 금액 저장
3.50을 mysql 테이블에 저장하고 싶습니다. 나는 그것을 저장하는 플로트가 3.50이 아닌 3.5로 저장됩니다. 후행 0을 갖도록 어떻게 할 수 있습니까?
값을 부동 소수점으로 저장하지 말고 DECIMAL 또는 NUMERIC 유형을 사용하십시오.
수정 및 설명 :
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 £ instead of pence, we can divide by 100 (presentation only) : £" + intSum/100 + "<br />");
</script>
참고 URL : https://stackoverflow.com/questions/2251290/storing-money-amounts-in-mysql
'ProgramingTip' 카테고리의 다른 글
sqlite3 (~> 1.3.6)을 활성화 할 수 없음, 이미 활성화 된 sqlite3-1.4.0 (0) | 2020.11.29 |
---|---|
Python의 사용자 비활성화 인 시간 형식? (0) | 2020.11.29 |
CSS : 이미지 링크, 마우스 오버시 변경 (0) | 2020.11.29 |
명령 줄을 대용량 SQL 파일을 MySql로 가져 오기 (0) | 2020.11.29 |
will_paginate 정의되지 않은 메소드`total_pages ' (0) | 2020.11.29 |