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

浮点数精度丢失问题

C#中的浮点数,分单精度(float)和双精度(double): float 是 System.Single 的别名,介于 -3.402823e38 和 +3.402823e38 之间的32位...
  • a2657222
  • a2657222
  • 2014年12月22日 14:15
  • 1128

关于float和double丢失精度问题及解决方案

double result = 1.0 - 0.9; System.out.println(result);//0.09999999999999998 出现这种结果的原因:float和double类型...
  • Wanted_Tao
  • Wanted_Tao
  • 2016年10月21日 10:34
  • 2131

关于C++ double浮点数精度丢失的分析

看了一篇关于C/C++浮点数的博文,在Win32下,把int, 指针地址,long等4字节整数赋给一个double后,再用该double数赋给原始类型的数,得到的结果于最初的数值一致,即不存在任何精度...
  • cai870808
  • cai870808
  • 2014年05月03日 10:37
  • 7966

关于JavaScript中计算精度丢失的问题

摘要:  由于计算机是用二进制来存储和处理数字,不能精确表示浮点数,而JavaScript中没有相应的封装类来处理浮点数运算,直接计算会导致运算精度丢失。  为了避免产生精度差异,把需要计算的数字...
  • CatieCarter
  • CatieCarter
  • 2017年02月14日 10:42
  • 608

iOS 关于网络数据解析小数位精度丢失问题的修正

近日,项目中出现了后台返回数据,特别是价格时,小数位会出现很多9999的现象,而在谷歌浏览器测试后台返回数据时,正常显示是只有2位,后台也说只返给了2位小数给我,百思不得其解,只能认为是开发环境不同造...
  • txz_gray
  • txz_gray
  • 2016年11月23日 13:46
  • 2236

JS的浮点数计算精度丢失问题解决方案

近期在做项目的时候,遇到了一些JS浮点数精度的问题。这个问题,其实说大不大,说小不小。但是这次因为涉及到一些财务和结算的问题,然后突然发现这个小问题处理起来还是挺麻烦的。这里把相关的原因的问题的解决方...
  • u012143360
  • u012143360
  • 2016年11月13日 13:31
  • 2246

FastJson与Gson转换成json串丢失精度问题

转载请注明出处:大家好,最近在项目开发过程中碰到一个比较坑的问题,导致与后台服务器联调花了比较多的时间,所以在这里记录一下这个坑,如果有人碰到了,也可以提供了一个比较好的参考方法。问题如下:我的jav...
  • woshizisezise
  • woshizisezise
  • 2016年08月22日 14:18
  • 1975

关于Java中用Double型运算时精度丢失的问题,真的很蛋疼!

在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我...
  • Bleach_kids
  • Bleach_kids
  • 2015年10月14日 19:45
  • 4828

iOS - Json解析数据精度丢失处理

原文 http://blog.sina.com.cn/s/blog_92aba1430102wakk.html 开发中处理处理数字、价格金额等问题时, 后台经常返回float类型, 打印或转成NSS...
  • qq_23292307
  • qq_23292307
  • 2016年10月09日 18:06
  • 1128

浮点数精度丢失的原因

http://blog.sina.com.cn/s/blog_827d041701017ctm.html 问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么...
  • aosica321
  • aosica321
  • 2016年12月09日 11:37
  • 1164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C++builder中精度丢失的问题
举报原因:
原因补充:

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