.NET - 为什么C#中没有定点数值数据类型?

时间:2011-02-21 18:29:13

标签: c# .net fixed-point

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

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:6)

Decimal(基数为10的浮点数)被认为足够好了。

答案 2 :(得分:5)

一个问题可能与这个问题有关:你在哪里解决问题? .NET中的类型不能通过除类型之外的其他参数进行参数化,因此FixedNum<18,6>根本不可能。而且您不想创建FixedNum1x0FixedNum1x1FixedNum2x0FixedNum2x1FixedNum2x2等。

您需要能够参数化您的固定点类型,而不仅仅是值,因为这将导致几乎无法跟踪错误:

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类的内置实现。