Giả sử rằng chúng ta có một số System.Decimal.Tính toán Độ chính xác và quy mô của hệ thống
Để minh hoạ, chúng ta hãy xem một người có ToString() đại diện như sau:
d.ToString() = "123.4500"
Sau đây có thể nói về một số thập phân này. Đối với mục đích của chúng tôi ở đây, tỷ lệ được định nghĩa là số chữ số ở bên phải của dấu thập phân. Quy mô hiệu quả là tương tự nhưng bỏ qua bất kỳ số không dấu nào xảy ra trong phần phân số. (Nói cách khác, các thông số này được định nghĩa như thập phân SQL cộng với một số thông số bổ sung để giải thích cho khái niệm System.Decimal của trailing zeros trong phần phân đoạn.)
- chính xác: 7
- Quy mô: 4
- EffectivePrecision: 5
- EffectiveScale: 2
với một System.Decimal tùy ý, làm thế nào tôi có thể tính toán tất cả bốn người trong số các thông số một cách hiệu quả và không có chuyển đổi vào một string và kiểm tra chuỗi? Giải pháp có thể yêu cầu Decimal.GetBits.
Một số chi tiết ví dụ:
Examples Precision Scale EffectivePrecision EffectiveScale
0 1 (?) 0 1 (?) 0
0.0 2 (?) 1 1 (?) 0
12.45 4 2 4 2
12.4500 6 4 4 2
770 3 0 3 0
Ngoài giải thích những độ chính xác như zero sẽ là tốt (?).
Cảm ơn bạn, điều này rất thú vị. Không gần như nhanh như cạo thông tin ra khỏi ToString, như tôi hiển thị trong một bài đăng riêng biệt. –
Jon, nếu bạn nghĩ rằng bạn (uint []) (đối tượng) cast là ác (tôi đồng ý), thì tại sao bạn không sử dụng một cách gọn gàng hơn và rõ ràng hơn? – Joren
Tôi sẽ chỉ ra rằng mã này trả về độ chính xác và tỷ lệ sử dụng các định nghĩa ký hiệu khoa học. Ví dụ: 0,005 có Độ chính xác = 1 và Tỷ lệ = 3. Đó là cách làm thông thường, nhưng cách diễn giải khác của các tham số này là theo kiểu thập phân SQL. Bằng cách này, Precision = 3 và Scale = 3. Đó là số thập phân SQL nhỏ nhất bạn có thể sử dụng để giữ 0,005. Câu hỏi ban đầu đã đề cập một cách ngắn gọn các số thập phân SQL (nhưng không đưa ra một ví dụ về trường hợp này, nhờ Jon Seigel, người gần đây đã chỉ ra cho tôi). Việc triển khai của tôi (FastInfo bên dưới) cung cấp loại chính xác và quy mô sau. Cảm ơn! –