有没有办法使用十进制数据类型,比如一种方式decimal32
, decimal64
或decimal128
在我的C ++程序?
Answer 1:
从这些类十进制TR是不是所有的编译器来实现。 一些编译器,如GCC ,实现Ç十进制TR ,并提供C ++中的相应扩展了。 在过去有可用的开源实现对C ++十进制TR,但我没能找到它。 如果你的编译器不支持小数类型,你最好的选择可能是创建IBM的包装decNumber库 。
为了提高在C ++的未来的情况,我创建了一个计划,以更新的TR ,我要去把目前的TR为准备下一个C ++委员会会议(四月在布里斯托尔)一个完整的计划,试图让它通过为C ++标准,有可能成为计划于2014年修改我的实现是我日常工作的一部分,它是不是由我来决定,尽管有一些希望,它是否能提供其公开可以开源了在某些时候。
Answer 2:
您可以使用简单易用的C ++模板与只头的解决方案: https://github.com/vpiotr/decimal_for_cpp
请注意,这不是一个'大 ''小数类; 它被限制为64位的价值的‘尾数’数字。
[从链路采取]
#include "decimal.h"
using namespace dec;
// the following declares currency variable with 2 decimal points
// initialized with integer value (can be also floating-point)
decimal<2> value(143125);
// to use non-decimal constants you need to convert them to decimal
value = value / decimal_cast<2>(333.0);
// output values
cout << "Result is: " << value << endl;
// this should display something like "429.80"
// to mix decimals with different precision use decimal_cast
decimal<6> exchangeRate(12.1234);
value = decimal_cast<2>(decimal_cast<6>(value) * exchangeRate);
cout << "Result 2 is: " << value << endl;
// this should display something like "5210.64"
cout << "Result 2<6> is: " << decimal_cast<6>(value) << endl;
// this should display something like "5210.640000"
Answer 3:
使用INT32或Int64类型,并(手动)移动小数点到您希望它是。 如果你测力计,例如,只测量美分,而不是和不同的显示值。 简单!
Answer 4:
升压具有cpp_dec_float为好。 直到它采用为标准可能是最好的解决方案。
https://www.boost.org/doc/libs/1_68_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html
Answer 5:
GCC /铛(通常情况下)带着自己的浮点十进制实现中,如果你的发行版决定将其编译成任何的gcc /他们提供铛版本(不适用于某些手臂发行版我尝试了的情况下)。 这就是为什么你有时需要自定义小数类型的实现。 尝试矿山的想法(在i586测试一路aarch64)。