如何正确显示和比较浮点数

#include<iostream>
using namespace std;
int main()
{
 float sum=0.0;
 for(int i=0;i<10;i++)
 {
  sum=sum+0.01;
 }
  cout<<sum<<endl;
 if(sum==0.1)
 {
  cout<<"相等"<<endl;
 }
 else
 {
  cout<<"不相等"<<endl;
 }
 return 0;
}
/*
小结:
1)运行结果
0.1
不相等
2)解释
通过分析,表达式sum==0.1虽然在数学上应该为真,但在程序中却不为真。
原因是浮点类型的有限精度导致在重复的累加操作中引入舍入误差,所以
在程序中的结果是不相等的
3)解决:
一般在检查两个浮点数是否相等时,可以通过指定最大误差容限,来检查
这两个值是否足够接近,而不是直接测试它们是否相等或者不等,例如可以
预先指定最大误差容限:
const float Delta=0.00001,然后把sum=0.1改成:fabs(sum-0.1)<=Delta
即可,其中使用数学库函数fabs(),来返回浮点参数的绝对值
*/
  ///////////////////正确的比较方式代码如下://////////////////////////////////
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
 float sum=0.0;
 const float Delta=0.00001;
 for(int i=0;i<10;i++)
 {
  sum=sum+0.01;
 }
  cout<<sum<<endl;
 if(fabs(sum-0.1)<=Delta)
 {
  cout<<"相等"<<endl;
 }
 else
 {
  cout<<"不相等"<<endl;
 }
 return 0;
}

你需要在显示器上面正确显示一个数字,但是这个数字有很多的垃圾信息,浮点型数据后面的零和双精度数据后面的鸡蛋不是我想要的,当然了,谁会在乎0.000000001分,因此有必要休整一下我们的小数点军团。

比如我们有12元3角5分,不对,我们应该按照银行家(当然会让我想起银行家算法,一种借钱的规则))的计算方式得出本钱加上利息,一共是100000200.2300222元。问题是显示器不给力啊。只好忍痛割爱保留小数点后两位。但是很不幸我们选择了一个很悲催的数字,如果先是上面的数字乘以100,然后强制转换类型成无符号整型(有符号整型可以吗?当然可以,储蓄用户只是不希望支票透支的),已经出现溢出,糟糕,用户说我的一个亿不见了。

如果不出现上面这么庞大的数字(当然一个小小的平凡人家,就顶多四五个零,但他是比尔),乘以100,然后强制转换类型去掉小数点后面的臭鸡蛋,然后再格式化输出,当然是求模了。

就是因为无符号整型能够表示的最大范围是4000000000,也就是40亿,我们需要提供最高国民待遇,另类的方法处理(先睡觉,困了午安)

时间: 2024-08-08 13:41:19

如何正确显示和比较浮点数的相关文章

让secureCRT正确显示中文

1.安装linux时选择中文系统,或安装后vi /etc/sysconfig/i18n文件改为:LANG= zh_CN.UTF-8 2.在secureCRT里面: Session Options(会话选项) -> Terminal(终端) -> Appearance(显示), 将Fonts(字体)选择成fixedsys将charater(字符)选择成UTF-8就支持中文了. 让secureCRT正确显示中文,布布扣,bubuko.com

grails2.3.x创建插件,gsp页面不能正确显示内容

grails2.3.x创建plugin时,默认的Config.groovy只有简单的log设置,这时候,页面添加数据之后,正确的逻辑是show新增的数据,但却变成404,需要在Config.groovy中增加以下代码: grails.mime.types = [ // the first one is the default format all:           '*/*', // 'all' maps to '*' or the first available format in wit

native-base中icon不能正确显示[转]

初次接触native-base,在使用它的Icon组件的时候碰到了一个问题:图标没能正确显示!(在expo调试模式下是正常的) native-base官网给的使用Icon的例子 怎么找到适合我的图标呢? github上的react-native-vector-icons,介绍了怎样在项目中使用图标 从上面的第一个链接中我们知道了Icon组件最简单的用法,如下: 从上面的第二个链接中我们知道了native-base给提供了哪些图标让我们使用.从这里我们可以看出有不止一个Icon提供者. (例如:E

uploadify不能正确显示中文的按钮文本的解决办法

uploadify 目前不能正确显示中文的按钮文本. 我发现bug的原因是uploadify错误的使用了 js 的 escape 和 flash 的 unescape配对,而这2个是不兼容的.正确的转码传递参数应该用 encodeURI/decodeURI 配对,这2个函数的行为在js和flash里是相同的.其他地方的escape/unescape也应该替换掉,下面只修改影响按钮文本的部分.1. jquery.uploadify.v2.1.4.js 70行 将if (settings.butto

如何使cmd窗口正确显示utf-8编码的文字

在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是cmd窗口中utf-8格式的编码.cmd窗口默认编码为gbk,数字代码为936 D:\>chcp 65001 Active code page: 65001 3,在cmd窗口标题栏里右键点击,调出右键菜单,点击属性->字体,将字体改成Lucida Console, OK,可以正确显示utf-8编码的

App里面如何正确显示用户头像

1.说明,一般用户头像在上传的时候都会处理为正方形,如果没有处理该怎么正确显示用户头像呢?解决方案:用css强制 在线地址移动端:戳这里 <div class="main-meimg"><img src="http://playback-langlive.ufile.ucloud.com.cn/c8f137446774494db18e41839c4a788f.jpg" alt=""></div> css .ma

fragment嵌套,viewpager嵌套 不能正确显示

转帖:http://blog.csdn.net/mybook1122/article/details/24003343 通常为 viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList)); 替换为 mPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), fragmentsList));

easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案

EasyUI是一套比较轻巧易用的Jquery控件,在使用过程中遇到一个问题,它的列表控件——datagrid, 在显示日期列的时候,由于后台返回给页面的数据是Json格式的,其中的日期字段,在后台是正常的“2012-11-10 12:18:00”这样的格式,json序列化后返回到前台页面就被转换成一个像 /Date(1419264000000)/的格式,导致easyUI无法解析这个字段.经过一番研究,下面给出两种解决方式 希望能帮到大家! 第一种:比较简单 定义函数:function forma

windows中让secureCRT正确显示中文(ssh)

已经在raspi中正确设置了juicessh安卓客户端已经测试过了,可以正常显示中文. 1.安装linux时选择中文系统,或安装后vi /etc/sysconfig/i18n文件改为:LANG= zh_CN.UTF-8 2.在secureCRT里面: Session Options(会话选项) -> Terminal(终端) -> Appearance(显示), 将Fonts(字体)选择成fixedsys将charater(字符)选择成UTF-8就支持中文了. windows中让secureC