2017-04-20 1 views
1

PHP로 소수점을 MySQL에 삽입 할 때 문제가 발생했습니다. 숫자는 통화로 포맷되고 세션 변수에 저장됩니다.DB에 삽입 한 후 소수점 이하가 반올림됩니다.

$amount= number_format((float)$_SESSION['total'], 2, ",", ''); 
echo $amount; 
//output = 2,85 

은 이제과 같이 수행되는 데이터베이스로 변수 $ 금액을 삽입해야합니다 :

쉼표로 점을 대체하기로 number_format를 사용

$_SESSION['total']; 

나에게 정확한 출력을 제공

$query = "INSERT INTO testtable VALUES" . "('$amount', 'NULL')"; 
$result = $con->query($query); 

삽입시 번호는 "2,00"으로 삽입되고 "2,85"는 삽입되지 않습니다. number_format 없이도이 작업을 시도했지만 동일한 결과를 얻습니다.

행은 십진수 (10,2)로 설정됩니다.

어떻게 변수 에코가 올 바르고 삽입 할 수 있습니까?

답변

0

number_format()의 출력은 문자열이며, 문제는 문자열 2,85이 문자열의 첫 번째 문자를 사용하여 숫자로 캐스팅 있도록 MySQL은/​​PHP는 유효한 숫자되는 쉼표 , 소수 구분 기호로를 알 수 없다는 것입니다 문자.

당신이 .,을 교체하고 float로 캐스팅하여 어떤 계산이나 데이터베이스 삽입을하기 전에 당신은 실수로 문자열을 변환해야

: 대신

$number = (float) str_replace(',', '.', $amount); 

세션 변수가 포함 된 경우 실제 번호 문자열을 직접 사용해야합니다.

수레를 사용하면 정밀 문제/반올림 오류가 발생할 수 있습니다. 이 경우 정수만 사용해야합니다 (예 : 금액의 경우 센트이므로 2.85 대신 285).

0

쉼표가 아닌 점 분리 기호를 사용하여 삽입해야합니다.

$amount = number_format((float)$_SESSION['total'], 2, ".", ''); 
echo $amount; // prints 2.85 
$query = "INSERT INTO money (total,second_field) VALUES" . "($amount, 'NULL')"; 
$result = $conn->query($query); 
0

사용자가 쉽게 읽을 수 있도록 number_format()을 사용합니다. 문 내에서 $ amount = number_format ((float) $ _ SESSION [ 'total'], 2, ",", ''); $ 금액은

1 행이 삽입 경고와 함께 레코드를 삽입 할 소수점 타입의 캐릭터와 MySQL 필드에 문자열을 삽입합니다. 경고 : # 1265 데이터 행에 'decimal_test'컬럼에 대해 잘립니다 1

$_SESSION['total'] = "2,85"; 
$total_in_decimal = str_replace(',', '.', $_SESSION['total']); 
$query = "INSERT INTO testtable VALUES" . "('$total_in_decimal', 'NULL')"; 
$result = $con->query($query); 
아래 그림과 같이 숫자 ","제거하고 MySQL의 테이블에 값을 삽입 않는 str_replace를 사용할 수 있습니다