似乎固定点数据类型会有大量用途。为什么.NET中没有一个?
注意:我知道我们可以创建自己的类/结构来满足我们的定点目的和需求。那不是我的问题。我想知道为什么MS决定不包括定点数字数据类型。
答案 0 :(得分:7)
您正在寻找鲜为人知的System.Data.SqlTypes.SqlDecimal
class。
答案 1 :(得分:6)
Decimal
(基数为10的浮点数)被认为足够好了。
答案 2 :(得分:5)
一个问题可能与这个问题有关:你在哪里解决问题? .NET中的类型不能通过除类型之外的其他参数进行参数化,因此FixedNum<18,6>
根本不可能。而且您不想创建FixedNum1x0
,FixedNum1x1
,FixedNum2x0
,FixedNum2x1
,FixedNum2x2
等。
您需要能够参数化您的固定点类型,而不仅仅是值,因为这将导致几乎无法跟踪错误:
FixedNum f() { return new FixedNum(1, decimals: 2); }
FixedNum x = new FixedNum(1, decimals: 0);
...
x = f(); // precision of x increased.
因此,每次从不是局部变量的东西中获取固定点值时,您都需要检查和约束它们。正如您在需要固定比例或精度时使用decimal
一样。
换句话说,鉴于.NET类型系统的限制,decimal
已经是上面的FixedNum类的内置实现。