当前位置: 首页 > 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.tj-hxxt.cn/news/19738.html

相关文章:

  • 深圳快速网站制作服百度快照是干什么的
  • 网站排名恢复做百度seo
  • 网站建设是设计师吗佛山seo优化外包
  • 华为网站建设方案模板下载太原百度关键词优化
  • 苏州工业园区建设局网站百度服务
  • 长宁网站建设公司三只松鼠网络营销方案策划书
  • 每个企业都要做网站吗百度联盟一天多少收入
  • 做游戏网站主页的素材放心网站推广优化咨询
  • 在中国做采购在哪个网站找产品网络建站工作室
  • 网站管理员登录seo优化网站推广全域营销获客公司
  • 网站索引量突然下降市场营销策略包括哪些策略
  • 南京网站公司四川seo多少钱
  • 佛山做外贸网站代理商上海百度推广开户
  • 网站做301打不开外链群发平台
  • ui设计培训班排名奶糖 seo 博客
  • 圣亚科技网站案例产品营销推广的方案
  • 赣州网站建设如何长春网络营销公司
  • 阿里云 网站谷歌浏览器 安卓下载
  • 支付通道网站怎么做百度推广登录平台登录
  • WordPress禁止下载宜昌网站seo
  • 物流网站怎么做手机百度引擎搜索入口
  • 知名设计网站推广软件的app
  • 网站建设的工作流程柳州今日头条新闻
  • 哈尔滨网站建设q479185700惠怎么投放广告
  • 网站关键词排名软件推荐seo公司排名
  • 桂林人论坛风姿摄影seo技术教程博客
  • 佛山网站建设佛山网站制作seo广州工作好吗
  • 天津专门做网站的公司网站建设首页
  • 产品品牌推广公司引擎优化seo怎么做
  • 网页做二维码哪个网站好微商刚起步怎么找客源