Perl에서 NUMERIC (19,5) 형식의 SQL Server 2005 데이터베이스 열에 값을 삽입합니다. 절대 값이 .0001 이상인 경우 작동합니다. 그러나 값을 소수점 다섯째 자리로 이동하면 Perl은 지수 형식 (-0.00009
대신 -9e-05
)으로 저장하기 시작하고 SQL Server에서 ""이라는 오류 메시지가 나타납니다. 어떻게이를 방지하고 작은 숫자 값을 올바르게 삽입합니까? 우리는 펄 v5.8.5을 사용하는Perl의 부동 소수점 숫자에서 '데이터 유형 varchar를 숫자로 변환하는 중 오류가 발생합니다'라는 이유가 무엇입니까?
, DBI 1.56, DBD ::베이스 1.07, 및 SQL Server 2005
코드는 대략 다음과 같다,하지만 난 불필요한 필드를 제거했습니다 :
$invoice->{IL_UNITPRICE} = 0.09; # Actually comes from another database
$invoice->{IL_PRICEUNITCONV} = 0.001; # Actually comes from another database
$unitprice = $invoice->{IL_UNITPRICE} * -1 * $invoice->{IL_PRICEUNITCONV};
#$unitprice equals -9e-05 at this point.
$sth = $dbh->prepare('INSERT INTO foo (bar) VALUES (?)');
$sth->execute($unitprice);
을
위의 선은 오류와 함께 실패 : DBD::Sybase::st execute failed: Server message number=8114 severity=16 state=5 line=2 server=baz text=Error converting data type varchar to numeric.
Perl의 자동 부동 소수점 형식을 올바르게 처리하는 대신 부동 소수점 숫자를 올바르게 형식화해야한다는 점을 기억해야합니다. – LeBleu
예. 그렇지만 과학 표기법을 사용하기로 결정한 것은 어느 시점에서 발생해야하며 컴파일러의 기본값을 사용하기로 결정했습니다. 자세한 내용은 http://perldoc.perl.org/perlnumber.html –
컴파일러가 아닌 C 라이브러리의 기본값을 참조하십시오. – ysth