其他分享
首页 > 其他分享> > c – 将货币金额汇总到最接近的镍,季度,1美元,5美元等面额的最佳方法是什么?

c – 将货币金额汇总到最接近的镍,季度,1美元,5美元等面额的最佳方法是什么?

作者:互联网

加拿大宣布他们将不再精打细算,美国财政部正在考虑效仿:这意味着货币金额必须四舍五入到最接近的镍,因此需要进行大量的程序修改!在典当行业务中,我们将贷款金额四舍五入到最接近的5美元面额,例如: 50,55,60 ..当计算的贷款介于50美元和100美元之间时,最接近10美元以上的10美元以上等等.其惯常做法是尽量减少使用较小面额的账单.那么什么是四舍五入到最接近的所需面额的好算法?

在SQL中,我可以创建一个用户定义的数据类型来舍入到n面额,或者更好的是单独保留十进制(8,2)数据类型并使用函数舍入?

解决方法:

我很想在SQL中使用:

new_val = ROUND(old_value * 20) / 20;

当镍币走向分钱的时候,那么:

new_val = ROUND(old_value * 10) / 10;

这在SQL中使用DECIMAL或NUMERIC值时效果很好;它也适用于SQL FLOAT,而且SQL SMALLFLOAT的可靠性稍差(因为SMALLFLOAT可能只有大约6位小数的精度).如果old_value是double,则可以在C中使用相同的基本技术(如果它是一个浮点数则更加可疑,原因与SQL SMALLFLOAT有问题的原因相同).在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()没有返回值来进行错误检查.使用其中一个输入作为最后一行的输出是安全的.

标签:informix,c,sql,algorithm,rounding
来源: https://codeday.me/bug/20190826/1729940.html