标签:informix c sql algorithm rounding
加拿大宣布他们将不再精打细算,美国财政部正在考虑效仿:这意味着货币金额必须四舍五入到最接近的镍,因此需要进行大量的程序修改!在典当行业务中,我们将贷款金额四舍五入到最接近的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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。