vb里边为什么1 MOD 0.5 会报除数为零

yuxiaobin66 2018-09-19 09:48:53
程序是这样的
If Polish1Depth Mod Polish1Feed = 0 Then
layernum = Polish1Depth / Polish1Feed
Polish1Layer = Polish1Depth / layernum
Else
layernum = Polish1Depth / GrindFeed + 1
Polish1Layer = Polish1Depth / layern
End If
报错的时候显示Polish1Depth=1,Polish1Feed=.5
1 mod 0.5不应该是商2余0吗?为什么会报错除数为零?
...全文
838 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2018-10-08
  • 打赏
  • 举报
回复
引用 8 楼 of123 的回复:
[quote=引用 7 楼 worldy 的回复:]
[quote=引用 2 楼 of123 的回复:]
Mod 是整数运算符,对于小数运算前,被除数和除数都要取整。

按照 VB 的规则,4 舍 6 入,5 按整数部分奇进偶舍。0.5 的整数部分是 0,当作偶数的,因此后面的小数舍掉了。


应该没有四舍五入吧?应该是直接取整[/quote]多试几个除数就知道了。[/quote]

老兄厉害,缺实有四舍五入
of123 2018-10-08
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
[quote=引用 2 楼 of123 的回复:]
Mod 是整数运算符,对于小数运算前,被除数和除数都要取整。

按照 VB 的规则,4 舍 6 入,5 按整数部分奇进偶舍。0.5 的整数部分是 0,当作偶数的,因此后面的小数舍掉了。


应该没有四舍五入吧?应该是直接取整[/quote]多试几个除数就知道了。
worldy 2018-10-08
  • 打赏
  • 举报
回复
引用 2 楼 of123 的回复:
Mod 是整数运算符,对于小数运算前,被除数和除数都要取整。

按照 VB 的规则,4 舍 6 入,5 按整数部分奇进偶舍。0.5 的整数部分是 0,当作偶数的,因此后面的小数舍掉了。


应该没有四舍五入吧?应该是直接取整
worldy 2018-10-08
  • 打赏
  • 举报
回复
mod只能整数操作,调用参数非整数,则抛弃小数部分
舉杯邀明月 2018-10-08
  • 打赏
  • 举报
回复
噫,10楼的“引用”在编辑后,“范围”出错了………… 

重新处理一下,这下应该不会错了吧…………


引用 9 楼 worldy 的回复:
引用 8 楼 of123 的回复:
[quote=引用 7 楼 worldy 的回复:]
. . . . . . .
多试几个除数就知道了。


老兄厉害,缺实有四舍五入[/quote]

都说了那个“不是四舍五入”了,你还在说是四舍五入…………



VB6中那个“自动取整”的舍入方式,虽然我“自己清楚”它的规则(当然不是“只有我清楚”),
但还真不好给它取个“合适”的名字。
舉杯邀明月 2018-10-08
  • 打赏
  • 举报
回复
引用 9 楼 worldy 的回复:
[quote=引用 8 楼 of123 的回复:]
. . . . . . . . . .

应该没有四舍五入吧?应该是直接取整
多试几个除数就知道了。[/quote]

老兄厉害,缺实有四舍五入[/quote]

都说了那个“不是四舍五入”了,你还在说是四舍五入…………



VB6中那个“自动取整”的舍入方式,虽然我“自己清楚”它的规则(当然不是“只有我清楚”),
但还真不好给它取个“合适”的名字。
ruan1978 2018-09-30
  • 打赏
  • 举报
回复
mod两边操作数要求是整形,直接取整,为0了,当然除数就是为0了
脆皮大雪糕 2018-09-19
  • 打赏
  • 举报
回复
引用 3 楼 yuxiaobin66 的回复:
是的,找到问题了,我把两边都乘了十倍


那就结贴,赶紧的
yuxiaobin66 2018-09-19
  • 打赏
  • 举报
回复
是的,找到问题了,我把两边都乘了十倍
of123 2018-09-19
  • 打赏
  • 举报
回复
Mod 是整数运算符,对于小数运算前,被除数和除数都要取整。

按照 VB 的规则,4 舍 6 入,5 按整数部分奇进偶舍。0.5 的整数部分是 0,当作偶数的,因此后面的小数舍掉了。
脆皮大雪糕 2018-09-19
  • 打赏
  • 举报
回复
mod 要求两个操作数都是整数。你的0.5被强制转换成整数的时候变成0了。
再说了,取模取余数都是针对整数的,之所以有模就是因为不引入浮点数
浮点数大多是近似等于你给出的值,计算结果也都是近似结果。只有整数运算是精确的。

如果你非要这么算,那么就要改改你的写法
Polish1Depth Mod Polish1Feed
改为:
Polish1Depth - fix(Polish1Depth / Polish1Feed ) * Polish1Feed

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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