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.