关于C++builder中精度丢失的问题
来源:互联网 发布:通达信证券交易软件 编辑:程序博客网 时间:2024/05/21 06:56
原意:现有应交款项m元,折扣率n(0 < n < 1),折扣金额采取向下取整制,求折扣后金额LastMoney
公式:LastMoney = m - ( m * ( 1 - n ) )
现设m 为 14.25元 折扣率n为0.8 根据公式计算:
int nOrginMoney = 1425;(转换成分为单位进行计算)
double dRebate = 0.8;
int tempMoney = nOrginMoney * (1 - dRebate );
int nLastMoney = nOrginMoney - tempMoney ;
上面的做法存在精度丢失的问题,tempMoney 为整形,而等号右边的计算赋值得出的是浮点数,在进行转换的时候会对小数点后面进行截断。虽然这符合向下取整的规则,但是在上面的例子当中,右边 nOrginMoney * (1 - dRebate )算出来的是285.00,而转成Int类型之后放在tempMoney当中时,tempMoney的值为284,究其原因,右边的double计算值在内存当中进行存储的值并非285.00,而应该是284.9999XXXX,而这样直接进行强制转换会照成了精度的丢失。正确的类型转换并向下取整应该如下:
int tempMoney = nOrginMoney * (100 - (int)(dRebate*100) ) / 100;
将折扣率进行放大并装换成Int进行计算,放大系数由折扣率的精度决定。
0 0
- 关于C++builder中精度丢失的问题
- Java中关于精度丢失的问题
- 关于JavaScript中计算精度丢失的问题(一)
- 关于JavaScript中计算精度丢失的问题(二)
- 关于JavaScript中计算精度丢失的问题
- 关于JavaScript中计算精度丢失的问题
- 关于时间保存到数据库中丢失精度的问题
- 关于JavaScript中计算精度丢失的问题
- 关于小数负数丢失精度的问题
- 关于商业运算中浮点型运算丢失精度问题
- 关于float相减精度丢失的问题
- 关于float型的内存存储和精度丢失问题
- 关于iOS数据解析小数丢失精度的问题AFNetworking
- 关于iOS数据解析小数丢失精度的问题AFNetworking
- 关于float相减精度丢失的问题
- float丢失精度的问题
- double丢失精度的问题
- java中Double类型的运算精度丢失的问题
- leetCode(31):Combination Sum III
- 上下无缝滚动(应用高级盒子模型)
- Delphi与各种装置设备之间的开发整合及应用实例
- 二叉树路径的和(算法)
- 用户体验之如何优化你的APP
- 关于C++builder中精度丢失的问题
- HOG特征
- iOS应用架构谈 view层的组织和调用方案
- 多文件夹下的Makefile自动编译
- 使用ssh公钥实现免密码登录
- 【c++】随机化和枚举
- nyoj-673-悟空的难题(数组标记)
- uboot第二阶段启动流程
- 程序员从初级到高级的蜕变