固定点数据类型似乎有很多用途。为什么.NET 中没有一个?
注意:我知道我们可以创建自己的类/结构来满足我们的定点目的和需求。那不是我的问题。我想知道为什么 MS 决定不包含定点数字数据类型。
固定点数据类型似乎有很多用途。为什么.NET 中没有一个?
注意:我知道我们可以创建自己的类/结构来满足我们的定点目的和需求。那不是我的问题。我想知道为什么 MS 决定不包含定点数字数据类型。
您正在寻找鲜为人知的System.Data.SqlTypes.SqlDecimal
班级。
Decimal
(以 10 为底的浮点数)被认为足够好。
一个问题可能与这个问题有关:你在哪里解决问题?.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类的实现。