正如标题所说,Boost的cpp_dec_float
支持取模运算吗?我正在处理金钱,并想做一些模数运算来获取我需要归还的钞票和硬币的数量。 cpp_dec_float
似乎是唯一支持基数 10 的任意精度类。
最佳答案
如果你想要的只是硬币分配,你不能只做不取模吗?
Boost 多精度确实为后端类型定义了 fmod、trunc、mod 等;这是一个工作演示: Live On Coliru
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/number.hpp>
#include <iostream>
using Num = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<128>>;
int main()
{
Num x("189.5307");
for (Num denom : {
Num("500.00"), Num("200.00"), Num("100.00"),
Num("50.00"), Num("20.00"), Num("10.00"),
Num("5.00"), Num("2.00"), Num("1.00"),
Num("0.50"), Num("0.20"), Num("0.10"),
Num("0.05"), Num("0.02"), Num("0.01"),
})
{
Num count = x/denom;
if (count >= 1)
{
count = trunc(count);
std::cout << count << " * " << std::right << std::setw(6) << denom.str(2, std::ios::fixed) << "\n";
x -= denom * count;
}
}
std::cout << "Remainder: " << x << "\n";
}
我明确选择了一个“无效”输入值(面额精度过高),以便您可以验证它是否可以处理它们。我没有关心负数的情况,但你可以弄清楚:)
1 * 100.00
1 * 50.00
1 * 20.00
1 * 10.00
1 * 5.00
2 * 2.00
1 * 0.50
1 * 0.02
1 * 0.01
Remainder: 0.0007
关于c++ - Boost cpp_dec_float 支持模运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519001/