Borland C++ Builder中是否有类似于C#中的“decimal”类型?

6

2
英特尔拥有一个库http://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library/,它实现了IEEE 754-2008十进制浮点算术规范。 - dash
1
@dash,你提供的链接和英特尔库似乎很有希望。对于需要高度准确性的人来说,这值得一试。 - The Original Android
1
你可以考虑迁移到C++ .NET并使用System.Decimal,而不是使用过时的Borland C++吗?当然,你可以根据输入在.NET中创建一个小程序。 - The Original Android
@TheOriginalAndroid,我被迫要迁移到.NET :) 但我非常熟悉BCB... 我想知道在这种情况下谁会赢:.NET Vs. Borland - kokbira
1
@kokbira,Borland 正在与 Microsoft 竞争之中苦苦挣扎。只有 Linux、PHP 和 Apache 工具集能够与 Microsoft 竞争。我建议您尽快迁移到 .NET,而且无论如何您都会被迫这样做。至少,您就不必再处理这个十进制问题了。 - The Original Android
3个回答

8
C#中的decimal类型,即.NET的System.Decimal类型,是一种浮点数,存储为十进制而不是二进制编码。而floatdouble是更典型的二进制浮点数。也就是说,double存储为+/- x * 2^y,而decimal存储为+/- x * 10 ^ y。因此,它在金融数据等通常以x * 10^-2表示的数据方面表现更好。IEEE标准754(浮点数运算标准)将其称为“十进制浮点数”运算,并定义了32位和64位版本。
在C++中,这些类型实现在std::decimal命名空间中,称为std::decimal::decimal32std::decimal::decimal64,在<decimal>头文件中。如果Borland C++ Builder有这样的类型,则会在那里找到它。GNU的C++库包括此头文件,但据我所知,它实际上还不是标准的一部分,因此BCB可能没有它。如果是这种情况,则需要使用第三方库。@dash提供的英特尔Decimal Floating Point库是最知名的库,但如果您需要其他库,则可以通过Google搜索IEEE 754 Decimal来查找。

1
不错的回答,为你和克苏鲁加1分。 - dash
1
@kokbira 迈克尔的头像看起来像是克苏鲁神话小说中通常被称为克苏鲁的全能好人的图片。但实际上他并不是很友善。 - dash

3

这些是 Delphi 中可用的浮点类型:

single  :  4 bytes (32bits)
real    :  6 bytes (48bits)
double  :  8 bytes (64bits)
currency:  8 bytes (64bits) (this is probably what you're looking for)
extended: 10 bytes (80bits) (maps to double when you compile to x64!)

在C++ Builder中,似乎有一个 System::Currency 类,它模仿了Delphi内置的货币类型。也许研究一下这个会有所帮助。

有趣。你知道它是否使用十进制来存储值吗?currency 类型的范围是多少? - kokbira

2
我找到了这个链接 Borland C++原始数据类型 . 在HTML中查看。
有一种长双精度类型,其容量为10个字节。
该文档是信息性的。您可能仍想阅读它。

非常有信息量,但我正在寻找一种使用以十进制为基数存储的浮点值的方法,以查看某些程序上的计算是否会变得更加精确... - kokbira
我可以使用long double进行更精确的计算,但我想评估一个以10为底的解决方案... - kokbira
如果我正确理解了Borland的文档,那么Borland的浮点型和双精度型使用的是十进制而不是二进制。 - The Original Android

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接