水表都有一个最大读数,如果超过最大读数时,就要自动将水表的起始读数设为0
比如,一个水表的最大读数是:10000,上月止度是:9980.本月的读数是:30.出现这种情况时,要进行计算用水量,用水量可以这样计算:10000-9980+30=50.问题是,要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?
因为还有一种情况,就是抄表员在抄表时不小心会出错,把本月读数抄成9930,这时是可以提示他本月读数小于上月止度,可是30也是小于9980的,9930也是小于上月读数的!
关键是:要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?要有一个准则的!
比如,一个水表的最大读数是:10000,上月止度是:9980.本月的读数是:30.出现这种情况时,要进行计算用水量,用水量可以这样计算:10000-9980+30=50.问题是,要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?
因为还有一种情况,就是抄表员在抄表时不小心会出错,把本月读数抄成9930,这时是可以提示他本月读数小于上月止度,可是30也是小于9980的,9930也是小于上月读数的!
关键是:要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?要有一个准则的!
对最大值取模小于的做if 写清楚所有情况就行了。
对最大值取模
------------------------------------
这样的作用是什么呀?有点看不懂,还有,判断是否过圈的读数没办法在程序中写,因为这些是要抄表机进行判断的!
这样写不需要判断是否过圈
(10000 +30) mod 10000 等于 30 mod 10000 =30对于抄错表 小于一个范围可以下个月调整。 或者当时调整这个范围自己确定
但这样会有个bug,就是如果人家一个月的用量大于10000,就会认为没有过圈,但这样是比较不可能的。
你可以设定一个范围,以你的为例,假如抄表员看错了,抄成9930了,你就可以判断9930比9980小,然后9980-9930=50,你可以设定一个范围,比如2000,如果50<2000,则可以提醒抄表员是否看错!
你说的问题本身就会存在bug,应该在水表上控制,在程式上是控制不了的!假如人家用了10001,水表则会变成9981,你又怎么知道它又没过圈呢?
水表的最大读数是由水表口径来确定的,就像你说的,那样判断会有BUG,主要是范围不好设定,不过一般情况下是可以这样的,当发现抄表员抄表的数据比上月抄表数要小时,可以提示是否保存.若不保存则重新抄表,若保存,则说明是过圈的读数,
这种情况也是在:上月:9*** 本月:** 这时若保存,则一定是过圈的读数,那么可以判断最大读数也就是10000