10

일부 항목의 가격을 mysql 테이블에 넣어야합니다. 테이블을 만들 때 쉼표 뒤에 두 자리 이상 필요하지 않으므로 DECIMAL(10,2)을 사용하고 있습니다 (예 : 123,45는 입력으로 허용되지만 123,456은 PHP로 123,45로 반올림 됨).mysqli의 십진수 처리

첫 번째 질문 : DECIMAL(10,2)을 사용하면 쉼표 앞에 몇 개의 숫자가 저장 될 수 있는지 어떻게 알 수 있습니까? 나는 그것이 10이 아니라는 것을 안다. 10은 Mysql이 그 숫자로 수학을 할 때 사용하는 정밀도이다 : 그래서 숫자 자체의 길이가 어디에 지정되어 있는가?

둘째 질문 : 데이터 입력에 맞게 사용자 입력을 반올림하기 위해 PHP를 사용하고 있습니다 (쉼표 뒤에 두 자리 숫자로 플로트 함). 해당 데이터를 삽입하려면 mysqli->bind_param을 어떻게 사용해야합니까? 다음 중 bind_param에 의해 허용되는 이러한 데이터 유형 (documentation) 중 어느 것을 사용해야합니까 (가능한 이유는 무엇입니까?)?

Character Description 
i corresponding variable has type integer 
d corresponding variable has type double 
s corresponding variable has type string 
b corresponding variable is a blob and will be sent in packets 

답변

8

DECIMAL(10,2)10가 최대 자릿수가 사용된다는 것을 의미한다. 2은 십진수의 오른쪽에 두 개가 있음을 나타냅니다. 따라서 왼쪽에 8 자릿수가 남았습니다. the manual

데이터 유형은 십진수이므로 double을 사용해야합니다.

Integer에는 십진수 문자가 없으므로 모든 숫자가 바닥에 표시됩니다. String은 숫자 값이 아닌 텍스트 용입니다. Blob은 이진 대형 개체 인 EG : 이미지

+0

감사합니다! 그래서 10-2입니다. 지금은 이해합니다. – Saturnix

+0

스케일링 된 정확한 수치가 필요하면'double' 또는'float'을 사용하지 않는 것이 좋습니다. http://dev.mysql.com/doc/refman/5.6/en/problems-with-float.html –

+1

을보십시오.이 질문 및 답변에서 mysql은'decimal'을 사용합니다. double로 설정된 바인드 매개 변수 만 해당합니다. 그리고 주어진 유형에서만 옵션을 제공합니다. –