오라클 번호부터 C# 십진수까지
인터넷에 이 문제와 관련된 여러 스레드와 게시물이 있다는 것을 알고 있으며 (모든 기사를 인정하지는 않지만) 읽었지만 어느 것도 저를 완전히 만족시키지 못했습니다.
내 상황:
ODP.net ( dll 버전 2.111.6.0)을 사용하여 Oracle DB(버전 10 + 11)에 액세스하고 DataReader를 사용하여 데이터(.)를 검색하고 있습니다.NET 3.5, C#).
이 코드를 사용하면 '시스템'이 됩니다.오버플로예외(산술 연산으로 오버플로가 발생했습니다.)'
decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
그리고 이것은 '3,00000000000000000000000000000000000000000000E-126'의 값을 만듭니다.
decimal.TryParse(oraReader.GetOracleValue(0).ToString(),
NumberStyles.Any, null, out parsedOraDecimal)
이제 이 값을 제대로 검색하고 평가할 수 있는 방법을 찾아야 합니다. DB는 내가 통제할 수 없는 다른 앱에서도 사용되므로 변경할 수 없습니다.
내 C# 코드의 유형을 '십진법'에서 '더블'로 변환하는 것도 선택 사항이 아닙니다.
무슨 생각 있어요?
Oracle Decimal의 정밀도는 10진수보다 큽니다.그렇기 때문에 우선 정밀도를 줄여야 합니다.구문 분석은 모두 잊어버리고 암묵적 변환을 사용합니다.(검증되지 않은) 항목에 따라 시도해 보십시오.
decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));
방금 비슷한 문제가 있었는데 Oracle Data Adapter를 변경하여 Oracle 특정 유형(data_adapter)을 반환하는 접근 방식을 시도했습니다.ReturnProviderSpecificTypes = true;), 하지만 이는 단지 PITA일 뿐이며, 결국 Oracle Strings를 문자열 등으로 다시 캐스팅하게 됩니다.
결국 오라클의 라운드 함수를 사용하여 SQL 문에서 정밀 라운딩을 수행함으로써 해결했습니다.
SELECT round( myfield, 18 ) FROM mytable
그러면 닷넷은 수치를 십진법으로 행복하게 변환합니다.
언급URL : https://stackoverflow.com/questions/1906361/oracle-number-to-c-sharp-decimal
'codememo' 카테고리의 다른 글
| lodash에 일치하는 아이템을 대체할 수 있는 기능이 있습니까? (0) | 2023.10.20 |
|---|---|
| nodejs를 사용하여 이미지를 서비스하는 방법 (0) | 2023.10.15 |
| R에서 데이터 프레임과 목록의 차이점은 무엇입니까? (0) | 2023.10.15 |
| Angular ui-router $state.go가 내부 확인으로 리디렉션되지 않습니다. (0) | 2023.10.15 |
| 사용 안 함이란?jQuery UI에서 선택을 사용하시겠습니까? (0) | 2023.10.15 |