今天被一個dotnet的運算規則引起的錯誤﹐搞了半天才明白﹐特貼出來告訴大家﹐以免大家走我一樣的彎路

kuangxiang007 2004-12-11 11:54:54
在一段程序里發現一個錯誤﹐后來我簡化成以下程序﹐結果依然﹕
button_onclick里﹕

double intPWidth=40.0;
double intRowTotal=1.0;
double dblDrawZHeight=intPWidth * (intRowTotal * 2 / 3 + (1 / 3));
Response.Write(dblDrawZHeight.ToString());
Response.End();

結果居然是26.6666666666667;
我一開始所有的double類型都用int的﹐運算出這個錯誤結果后我改成double型仍然錯誤
調試后才發現它把(1/3)等于0
實在不明白.net這樣處理的原因

后來才發現把1/3 改成 1.0/3 即可﹐原因我不說了﹐估計大家看了也明白。
...全文
164 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2004-12-12
  • 打赏
  • 举报
回复
本来就是这样
nga96 2004-12-12
  • 打赏
  • 举报
回复
原来这样,谢谢,是个好主意的
yafizyh 2004-12-12
  • 打赏
  • 举报
回复
1/3 改成 (float)1/3 也一样,
1/3为整型除整型,结果也为整型,自然为0。(float)1/3在除之前1转化为了float,除后结果也为float.
兔子-顾问 2004-12-12
  • 打赏
  • 举报
回复
多谢提醒,进来瞅瞅有益健康
peng1014 2004-12-12
  • 打赏
  • 举报
回复
感谢楼主
hanyaocsdn 2004-12-12
  • 打赏
  • 举报
回复
up
huqiyang 2004-12-12
  • 打赏
  • 举报
回复
代表菜鸟程序员 感谢楼主!
rheleven 2004-12-11
  • 打赏
  • 举报
回复
^_^
  • 打赏
  • 举报
回复
呵呵。。
Ivony 2004-12-11
  • 打赏
  • 举报
回复
这是很正常的,类C风格的语言中,所有的数默认都是int型的,而int型的数相除是一个很大的陷阱,在使用前切记先查询编译器将会采取的操作再写诸如 3 / 1的代码。。。。。
一般"/"运算符不叫做除法运算符,而叫做取商运算符。基本上所有的类C风格的语言都保证 (a / b) * b + (a % b) == a(a,b均为整型)

C#的处理方式是将结果的绝对值舍去小数,加上符号后返回。
SAsura 2004-12-11
  • 打赏
  • 举报
回复
我还碰见过fpu有问题的,不知大家有没有什么想法?
ag1978 2004-12-11
  • 打赏
  • 举报
回复
还有四舍五入的问题,不知道大家碰到过没有?
topycsdn 2004-12-11
  • 打赏
  • 举报
回复
thanks

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧