三部曲

1:

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
double a=0.0001;
float b=0.1;
int c=(int)(a*1000)/b;
cout<<c<<endl;
} ///期望c==1 结果c却==0

2:

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
double a=0.0001;
float b=0.1;
int c=(int)(a*)/b;
printf("%.15lf\n",b);///实验结果证明 float转成double时出现了精度问题
cout<<a<<endl;
cout<<c<<endl; ///int向上取整 所以==0了
}

3:

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
double a=0.0001;
double b=0.1; ///我将float变成double 就OK了
int c=(int)(a*)/b;
printf("%.15lf\n",b);
cout<<a<<endl;
cout<<c<<endl;
}

4::::

double f;

int num =(int) f*100;

结果是:输入f = 1.23,  输出 num = 122.

  输入f = 1.25  输出 num =125

这就是著名的double精度损失问题。

因为1.23在计算机里面只能表示为近似值:1.2299999999.........

而1.25却能被精确的表示:

解决的办法是:

int num = (int)(f*100+0.0001),这个0.0001根据你需要的精度来设置,是可以改变的

这时候,不管f=1.23还是f=1.25,结果都是我们想要的123和125.

关键是要理解:  10110101 只是近似等于 1.0110101 * 2^7.

int float double 之间的关系是 int可以隐式转换成double 和float;
                                         float只能强制转换成int  但是可以隐式转换成double;
                                         double只能强制转换成int和float
 int与float之间的转换精度会缺失 当int——>float——>int时   两个int已经不相等了
 double与float之间的转换精度也会缺失 当double——>float——>double时  两个double不相等了
::::计算机以二进制存储数据  小数的二进制有可能会丢失数据 所以会存在误差   而int型二进制会除尽  不存在误差

double float的精度问题的更多相关文章

  1. iOS - Json解析精度丢失处理(NSString, Double, Float)

    开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:经过测试其实系统NS ...

  2. Java中浮点类型的精度问题 double float

    要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法与浮点数的结构组成.因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法.比如,简单点的,float四个字 ...

  3. java中浮点数的比较(double, float)(转)

    问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); Sy ...

  4. C#中decimal ,double,float的区别

    浮点型 Name CTS Type Description Significant Figures Range (approximate) float System.Single 32-bit sin ...

  5. [转载] c#中decimal ,double,float的区别

    一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 Name CTS Type De script ion Significan ...

  6. c++ double float 数值比较

    浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基 ...

  7. mysql基础之double,float长度标度定义

    MySQL类型float double decimal的区别 float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decima ...

  8. impala支持的数据库里的double(float)类型,通过迁移inceptor后,类型的值都变成了null

    impala支持的数据库里的double(float)类型,通过迁移inceptor后,double类型的值都变成了null. 通过查阅日志发现默认将double转换成Decimal(38,10)然而 ...

  9. Java 浮点数精确性探讨(IEEE754 / double / float)与 BigDecimal 解决方案

    一.抛砖引玉 一个简单的示例: double a = 0.0; IntStream.range(0,3).foreach(i->a+=0.1); System.out.println(a); / ...

随机推荐

  1. 发送邮件--MFMailComposeViewController

    只能在真机使用. 模拟器没有E-mail发送功能.无法调用 #import "EmailViewController.h" #import <UIKit/UIKit.h> ...

  2. 在 Ubuntu 上使用微信客户端

    原文地址: http://www.myzaker.com/article/5979115d1bc8e08c30000071/ 在这个快速信息交互时代,无论是工作还是生活,都需要频繁的网络社交,而在中国 ...

  3. [Python] 代码中有中文注释会报错

    原因 如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解决方法 在第一行或是第二行加入这么一句# -- coding: utf-8 -- ASCII知识普及: ASCII(Ameri ...

  4. 摹客iDoc201901-2新功能点评

    2019才刚刚开始,摹客团队就已经蓄势待发.马不停蹄地给大家带来了又一份惊喜.实话说,这次小摹都忍不住要点个赞!下面就赶紧带大家看看iDoc又更新了哪些新功能: 1.标注和评论融合.协作更高效 iDo ...

  5. 让UI设计师崩溃的瞬间,你经历过哪些?

    隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通.流畅的沟通,和声细语,是有如时雨之化者:无效 ...

  6. contenteditable设置元素可编辑

    需求背景 实现一个输入框,高度可以随着输入文字的增加而自动增高 有placeholder,输入为空时,显示placeholder 我们知道可以将div的contenteditable设置伪true,将 ...

  7. windows + php7.1 + redis3.1.4

    首先确定PHP版本(MSVC14 x64 NTS) 下载redis扩展 拷贝php ext目录,修改php.ini配置,添加 extension=php_redis.dll 重启apache,确认re ...

  8. Apache Prefork、Worker和Event三种MPM分析

    三种MPM介绍 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到 ...

  9. 2019.01.19 bzoj4592: [Shoi2015]脑洞治疗仪(ODT)

    传送门 ODT水题. 支持区间01赋值,区间填补(把区间[l,r][l,r][l,r]从左往右数kkk个1都变成0),区间查询最长连续1个数. 思路: 区间填补操作感觉不是很好弄,写线段树的神仙可以套 ...

  10. [转]图解CSS的padding,margin,border属性(详细介绍及举例说明)

    图解CSS的padding,margin,border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...