Tôi đã thấy số thập phân được sử dụng thay vì int / long trong các ví dụ khác nhau. Tôi chỉ đang cố gắng hiểu tại sao
Đó có thể là do .NET decimal và Oracle NUMBER bản đồ tốt hơn một chút so với long và NUMBER và nó cũng mang lại cho bạn sự linh hoạt hơn. Nếu bạn ở giai đoạn sau, hãy thêm thang điểm trong cột Oracle thì bạn sẽ không phải thay đổi kiểu dữ liệu nếu bạn đã sử dụng decimal .
decimal chắc chắn là chậm hơn int và long vì hai cái sau được hỗ trợ trong phần cứng. Điều đó nói rằng, bạn phải xử lý một số lượng dữ liệu nghiêm trọng để nó tạo ra bất kỳ sự khác biệt nào. Tôi vẫn nghĩ rằng bạn nên sử dụng long nếu đó là những gì bạn đang giải quyết và thì bạn cũng nên để các định nghĩa cột trong bảng thể hiện điều đó. NUMBER(18,0) cho long và như vậy.
Lý do decimal bản đồ tốt hơn một chút là long là 64 bit và decimal là (loại) 128 bit.
.NET
Nhập: thập phân Khoảng
gần đúng:± 1,0 × 10 ^ −28 đến ± 7,9 × 10 ^ 28
Độ chính xác:28-29 chữ số có nghĩaLoại: dài Phạm vi
:–9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807
Độ chính xác:18 (19 cho dài) chữ số có nghĩa
Oracle
NUMBER mặc định là 38 chữ số có nghĩa và tỷ lệ 0 (số nguyên).
Nhập: NUMBER Phạm vi
:+ - 1 x 10 ^ -130 đến 9,99 ... 9 x 10 ^ 125
Độ chính xác:38 chữ số có nghĩa
Microsoft đã biết về vấn đề và lưu ý
Kiểu dữ liệu này là bí danh cho kiểu dữ liệuNUMBER (38) và được thiết kế để OracleDataReader trả về aSystem.Decimal hoặc OracleNumber thay vì một giá trị số nguyên. Sử dụng kiểu dữ liệu .NETFramework có thể gây ra dòng chảy ẩn.
Nghĩ lại thì bạn thực sự cần BigInteger để có thể biểu diễn cùng một số chữ số có nghĩa như NUMBER mặc định là. Tôi chưa bao giờ thấy ai làm điều đó và tôi cho rằng đó là một nhu cầu rất hiếm. Ngoài ra BigInteger vẫn không cắt nó kể từ NUMBER có thể có giá trị vô cùng dương và âm.