加拿大宣布他们将不再类型转换便士,美国财政部正在强烈考虑效仿!这意味着货币金额必须四舍五入到最接近的五分之一,因此需要大量的编程修改!..在当铺业务中,我们一直将贷款金额四舍五入到最接近的 5 美元面额,例如50, 55, 60.. 当计算出的贷款介于 50 美元和 100 美元之间时,到 100 美元以上最接近的 10 美元面额等。这是为了尽量减少使用较小面额钞票的常见做法。那么四舍五入到最接近的所需面额的好算法是什么?

在 SQL 中,我可以创建一个用户定义的数据类型来四舍五入到 n 面额,还是最好单独保留小数 (8,2) 数据类型并使用函数四舍五入?

最佳答案

我很想在 SQL 中使用:

new_val = ROUND(old_value * 20) / 20;

当镍币走美分之路时,那么:
new_val = ROUND(old_value * 10) / 10;

这在带有 DECIMAL 或 NUMERIC 值的 SQL 中工作正常;它也适用于 SQL FLOAT,但与 SQL SMALLFLOAT 的可靠性稍差(只是因为 SMALLFLOAT 可能只有大约 6 个十进制数字的准确度)。如果 old_valuedouble (如果它是 float 则更可疑,因为 SQL SMALLFLOAT 有问题的原因相同),可以在 C++ 中使用相同的基本技术。在 C++ 或 C 中,您将使用 <cmath><math.h> header 来获取函数 round()roundf() 的声明。如果您使用 ESQL/C 和 dec_t ,那么您需要 decround(&dec_value, 0);

在 ESQL/C 中,您已经提供了四舍五入的位数,并且还必须对乘法和除法进行编码。假设你有一个十进制值 dec_20 包含值 20 ,你会写:
dec_t new_val;
decmul(&old_val, &dec_20, &new_val);
decround(&new_val, 0);
decdiv(&new_val, &dec_20, &new_val);

您可能会错误检查 decmul()decdiv()decround() 没有返回值来进行错误检查。使用其中一个输入作为最后一行的输出是安全的。

关于c++ - 将货币金额四舍五入到最接近的镍、四分之一、1 美元、5 美元等面额的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9952643/

10-13 06:39