2012-04-11 29 views
5

Tôi đang phải đối mặt với một vấn đề xảy ra khi cố gắng để có được kết quả của truy vấn sql đơn giản này trong NET (C#):giá trị phần Infinite trong cột truy vấn sql trong C#

select 1/3 as col from dual 

OracleDataReader.GetValue(i) ném một ngoại lệ:

Arithmetic operation resulted in an overflow. 
at Oracle.DataAccess.Types.DecimalConv.GetDecimal(IntPtr numCtx) 
at Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i) 
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i) 

tôi đã phát hiện ra rằng lỗi này occures khi số chính xác đi hơn 28 chữ số, vì vậy điều này dẫn đến lỗi:

select round(1/3,29) as col from dual 

nhưng điều này sẽ không

select round(1/3,28) as col from dual 

Đang cố gắng để đối xử với giá trị cột trong C# như đôi bị lỗi "dàn diễn viên không hợp lệ"

Có ai biết cách tiếp cận nào để tránh tình trạng này trừ tròn phổ biến các cột số?

+0

Bạn có thể cho lý do tại sao bạn muốn làm 1/3 trong truy vấn cơ sở dữ liệu !! –

+0

Đó chỉ là ví dụ. Bạn có thể nhận được phân số vô hạn như kết quả của một số công thức - bắt đầu từ số học trung bình để tính toán phức tạp hơn –

+0

Điều gì sẽ xảy ra nếu bạn làm điều này: 'chọn 1.0/3.0 từ kép'? –

Trả lời

Các vấn đề liên quan