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ố?
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 !! –
Đó 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 –
Đ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'? –