12

固定点数据类型似乎有很多用途。为什么.NET 中没有一个?

注意:我知道我们可以创建自己的类/结构来满足我们的定点目的和需求。那不是我的问题。我想知道为什么 MS 决定不包含定点数字数据类型。

4

3 回答 3

12

您正在寻找鲜为人知的System.Data.SqlTypes.SqlDecimal班级

于 2011-02-21T18:37:24.070 回答
7

Decimal(以 10 为底的浮点数)被认为足够好。

于 2011-02-21T18:29:58.250 回答
6

一个问题可能与这个问题有关:你在哪里解决问题?.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类的实现。

于 2011-02-21T18:46:40.013 回答