当前位置: 首页 > news >正文

网站维护年费腾云公司做网站

网站维护年费,腾云公司做网站,国外免费网站服务器,房产信息网海南📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不是…
  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由webmote 原创
  • 📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !

1.简单的比较,预期的结果在这里插入图片描述

一天,我在飞快的写代码,当然这个"飞快"我打上了引号, 因为手速奇快吗?并没有。

我遇到一个非常普通的场景,对于码农多年的我老说,应该是小菜一碟了。

然而,这次不一样,我被比较浮点数,绊倒了。

简单描述下场景: 大概的业务逻辑是这样的, 在一个判断告警的逻辑里,需要判断某个值在小于0.9时,就进行告警动作。

代码如下:

bool IsAlarm(float a)
{return a<0.9;
}//不相干的业务逻辑,简化下。。。
if(IsAlarm(a)){Console.WriteLine("嘀嘀嘀,报警了!");
}

写完了代码,就转给测试了,然后反馈说不该报警的时候报警了。

这是什么鬼啊?

Review了N遍代码,也找不到原因是啥。

2.写单元测试

由于业务场景复杂,又不方便调试,因此,实在打不开思路的我,开始折腾起单元测试。

[Fact]
public void TestAlarmSuccess()
{var a = 0.9F;var ret = IsAlarm(a);Assert.False(ret);
}

元凶终于浮出了水面,竟然时浮点比较出了问题。经过反复确认和排查,的的确确是

0.9F < 0.9

顺便说一嘴,这里用的是C#, 0.9F 是单精度浮点数,而 0.9 默认应该是 双精度浮点数。

看到这里,聪明的你是不是恍然大悟了!

如果你还是不明白, 那么跟着我再来探究探究其中的奥秘。

3. 原因说明

由于无知,我甚至跑到了github上提了一个issue,哦哦,大神给了我这样的解释。

这是预期的结果! 更多的信息,可以参考: IEEE Standard for Floating-Point Arithmetic
看下面的例子:

float data = 0.9F;
var firstComparisonValue = 0.9;
var secondComparisonValue = 0.9F;
Console.WriteLine(data < firstComparisonValue);
// return trueConsole.WriteLine(data < secondComparisonValue);
// return falseConsole.WriteLine(data == secondComparisonValue);
// return trueConsole.WriteLine($"Data Value: {data.ToString("F99")}");
Console.WriteLine($"First Comparison Value: >{firstComparisonValue.ToString("F99")}");
Console.WriteLine($"Second Comparison Value: >{secondComparisonValue.ToString("F99")}"); ```

输出结果:
True
False
True
Data Value: 0,899999976158142089843750000000000000000000000000000000000000000000000000000000000000000000000000000
First Comparison Value: 0,900000000000000022204460492503130808472633361816406250000000000000000000000000000000000000000000000
Second Comparison Value: 0,899999976158142089843750000000000000000000000000000000000000000000000000000000000000000000000000000

正如你看到的那样,double 类型的值是大于float类型的值的.

总结

比较数字的时候, 先强制转换成统一类型的数字,然后比较,才会得到你预期的结果。

否则,你就需要了解更多的IEEE规范知识,要不然一不小心,就掉到了坑里。

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

http://www.yayakq.cn/news/942518/

相关文章:

  • 阿里云网站实名认证谷歌推广效果好吗
  • 网站产品简介响应式网页设计针对的终端有哪些
  • 备案期间网站可以做竞价吗朗读者外国人做的汉字网站
  • 建立一个门户网站电商网站设计的准则是什么
  • 初学者网站建设网站管理员登录
  • 网站建设平台选用分析wordpress类似的平台
  • 有网站开发经验怎么写简历室内设计软件自己设计
  • 英文旅游网站建设湘潭市优化办
  • php网站开发书网络科技公司注册
  • 北京网站建设q.479185700強数据分析网页
  • 做诚信通谁给做网站wordpress ssl设置
  • 三亚凤凰镇网站建设兼职招聘网中信建设有限责任公司薛松
  • 做网站怎么qq邮箱验证湖南省建设厅建管处
  • 建设网站视频百度云盘做asp.net网站参考文献
  • 网站制作文案杭州做企业网站公司报价
  • 网站的元素有哪些wordpress 视频播放器
  • 卡盟网站建设公司用主机宝建立的网站上传之后404
  • 南京seo关键词排名关键词优化方法
  • 秦皇岛网站建设兼职wordpress友情链接激活
  • 珠海网站建设推广服务用centos搭建wordpress
  • 网站开发以图片为背景商城app开发多少钱
  • 一级a做网站免费律师网站建设培训班
  • 统计站老站长推荐app视频招聘网站开发兼职
  • 网上做流量对网站有什么影响矿泉水网站模板
  • 做网站的的步骤怎么写品牌设计法则徐适
  • 网站建设外包价格山东网站建设app
  • 两学一做 答题 网站做网站为什么要买网站空间
  • 网站开发国内外研究背景模板做图 网站有哪些内容
  • 可以浏览国外网站手把手教你搭建自己的网站
  • 网站怎么做端口映射大米品牌推广方案