【第22期】观点:IT 行业加班,到底有没有价值?

关于C++builder中精度丢失的问题

原创 2015年07月07日 10:24:15

原意:现有应交款项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进行计算,放大系数由折扣率的精度决定。
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

提高编程思想

虚函数和抽象函数有什么区别 虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写 抽象函数是没有代码,子类继承后一定要重写 *********
  • xpp02
  • xpp02
  • 2012-02-05 14:18
  • 48

C++ builder 的文件读写操作总结(转载)

C++ builder 的文件读写操作总结2007-08-29 14:08作者:佚名出处:论坛整理责任编辑:半仙   在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用...
  • ly_bi
  • ly_bi
  • 2009-02-08 14:34
  • 166

欢迎关注CSDN程序人生公众号

关注程序员生活,汇聚开发轶事。

提高编程思想

虚函数和抽象函数有什么区别 虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写 抽象函数是没有代码,子类继承后一定要重写 *********
  • mmdev
  • mmdev
  • 2012-02-05 14:18
  • 359

C++BUILDER的文件操作

在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于C的文件操作;2、基于C++的文件操作;3、...
  • bobwu
  • bobwu
  • 2009-09-07 15:01
  • 1887

文件操作函数总结

在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于C的文件操作; 2、基于C++的文件操作; 3、基于WINAPI的文件操作; 4、基于BCB库的文件操作; 5、特殊文件的操作。   壹、基于C的文件操作   在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作   这种方式的文件操作有一个重要的结构FILE,FILE在st
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)