社区
C#
帖子详情
C#高手们,你们能解释这是什么现象吗?
CsLover
2003-04-23 10:02:26
一段代码
float a=0.2178f;
float b=0.33f;
Console.WriteLine(a/b);
if(a/b==0.66f)
Console.WriteLine("1");
else
Console.WriteLine("0");
大家看看 目测一下结果 然后上机试试 检验一下你的预测
最重要的是问一下高手 为什么会这样?
...全文
37
13
打赏
收藏
C#高手们,你们能解释这是什么现象吗?
一段代码 float a=0.2178f; float b=0.33f; Console.WriteLine(a/b); if(a/b==0.66f) Console.WriteLine("1"); else Console.WriteLine("0"); 大家看看 目测一下结果 然后上机试试 检验一下你的预测 最重要的是问一下高手 为什么会这样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuwen16
2003-04-24
打赏
举报
回复
果然姜还是老的辣,呵呵
tyh800220
2003-04-24
打赏
举报
回复
崇拜saucer(思归, MS .NET MVP)
greenclass
2003-04-24
打赏
举报
回复
思归的方法是完全正确的
Knight94
2003-04-24
打赏
举报
回复
精度不一样
jlhdlj
2003-04-24
打赏
举报
回复
思归的方法是完全正确的,这种方法在C的入门书里就开始使用了!
pdsinfo
2003-04-23
打赏
举报
回复
呵呵,这是浮点数的存贮有误差引起的
“Console.WriteLine(a/b);”这一句之所以输出0.66是因为计算结果在ToString()的时候被近似作了0.66(恰巧在这里无误差)
(a/b==0.66f)之所以为false也是因为存储误差(其实还有计算误差和舍入时的精度误差,比如计算机认为1.0/3.0=0.3333333)引起的
所以,强烈建议不要“比较两个浮点数相等”——这是非常不可靠的!!
有例如 if(0.618f/1.414f*0.707f==0.500f)Console.WriteLine("equal");
else Console.WriteLine("not equal");
就输出 "not equal"
还有if(9E-400==0)Console.WriteLine("wrong");输出“wrong”
renchao
2003-04-23
打赏
举报
回复
这是机器运算精度误差造成的
一般可设一个容差闵值eps,让他们之差的绝对值在eps内就认为他们相等。
贝贝壳壳
2003-04-23
打赏
举报
回复
计算浮点数的时候有误差
只要误差控制在一定范围内即可,
而==则是完全比较。
甴曱
2003-04-23
打赏
举报
回复
你把代码改为:
float a=float.Parse((0.2178).ToString());
float b=float.Parse((0.33).ToString());
Console.WriteLine(a/b);
if(float.Parse(Convert.ToString(a/b))==float.Parse((0.66).ToString()))
Console.WriteLine("1");
else
Console.WriteLine("0");
这一个程序才正确,具体原因我现在也没有弄明白。
Soking
2003-04-23
打赏
举报
回复
好的结局方法是像思归说的用一个小于一定精度的数来代替0!
Soking
2003-04-23
打赏
举报
回复
机器的浮点运算不像我们人计算的,二进制计算除法会存在误差!
张新林
2003-04-23
打赏
举报
回复
up
saucer
2003-04-23
打赏
举报
回复
it is a bad idea to use "==" with floating numbers, try
if(Math.Abs(a/b - 0.66f) < 0.0001)
{
}
else
{
}
C#
高级程序设计
为什么要学习
C#
?
C#
是微软的**语言,拥有接近20年的历史和广泛的应用。目前国内对
C#
的书籍和视频相对较少,但
C#
和.NET的发展前程是十分光明的,这体现在微软公司本身强劲的实力,
C#
的开源,.NET Core社区的蓬勃发展,以及.NET开发岗位需求的不断增加。
C#
用途广泛,容易上手。可以说,如果你熟悉
C#
语言,你将不愁找不到好的工作。 本课程分为四部分(三层架构、设计模式、多线程、网络编程达人),详细的讲述了一名
C#
中、高级程序员需要学习的各项知识,其中宿舍管理系统实战是重中之重。课程主要特点: 1. 紧跟微软
C#
发展,使用
C#
语言和开发环境版本2. 结合应用案例,力求做到深入浅出,明白易懂3. 重要概念附有英文翻译4. 独家附赠一个面试经验分享,希望每位学生都可以从中受益,在面试中脱颖而出5.含宿舍管理系统的讲解希望本套课程在你学习
C#
的过程中,可以对你有所帮助。
算法 | 你知道算法为什么这么重要吗?
编者荐语: 大家好,我是你们的朋友 朋哥,今天聊聊算法,你了解算法为什么这么重要吗?为什么面试少不了算法?为什么算法这么难?带着这些疑问看下面文章把。 什么是算法? 我们先不要给算法是否重要就轻易下了一个结论. 到这先不着急给算法下定义做
解释
. 我们现在先来看看一种
现象
: 哪种语言是开发者们可以高高兴兴的用来编程的?近日,一位美国的开发者通过Twitter对开发者们进行了一项调查 :你是否喜爱XX语言 调查结果分析图: 基本上每个月都会有一些相关对语言使用程度做了一个排名. ...
c#
语言窗体运行暂停指令,
C#
线程启动、暂停、恢复、停止怎么实现
论坛的
高手
你们好,本人是一个菜鸟,肯请大家帮个忙实现如下功能:首先窗体界面如下:怎么实现“start”启动线程、“pause”暂停线程、“resume”恢复线程,“stop”停止线程,直观
现象
是,按start启动计数,在右边输出,点pause,会暂停输出,然后点resume能够继续输出,点stop则停止输出(这时候再点resume没反应,只能点start开始重新输出)下图是暂停,但是本人没法儿恢复...
C#
和.Net的优点、不足浅谈
研究了一下
C#
和.Net,有很多体会,好的不好的都有。随便谈谈,供大家参考。先说说它的优点:1、
C#
保留了对底层操作系统API的直接调用和指针。肯定是因为看到了Java的速度问题以及JNI的笨重,所以在设计
C#
时特意保留了这些C++的特性,避免了重导覆辙,也使得
C#
可以用来开发系统软件。普通应用都是调用.Net的程序集(相当于Java的类库,程序集里面都是byte code,不是nat
c#
中如何将表达式中的数字和运算符分离
在
c#
中怎么分离数字和运算符?去网上找个验证数字的正则表达式
已经默认实现了一些基本表达式的解析(同时还包含
C#
,sql,javascript等语言的简单解析),如果你需要更复杂的可以自己定制他个token规则ps:实际上BNF范式配合antir,yacc也是一样可以解析的。
楼主什么意思 ? 是计算字符型的数学数字表达式么?
还是说单纯的区分 数字 或是 运算符 ?
若是计算的话 ,可以用
c#
的动态编译 ,若是区分数字或是运算符的话可以对字符进行判断
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章