水表都有一个最大读数,如果超过最大读数时,就要自动将水表的起始读数设为0
比如,一个水表的最大读数是:10000,上月止度是:9980.本月的读数是:30.出现这种情况时,要进行计算用水量,用水量可以这样计算:10000-9980+30=50.问题是,要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?
因为还有一种情况,就是抄表员在抄表时不小心会出错,把本月读数抄成9930,这时是可以提示他本月读数小于上月止度,可是30也是小于9980的,9930也是小于上月读数的!
关键是:要怎么判断水表上显示的本月的读数是已经过圈的读数,而不是没有过圈的数?要有一个准则的!

解决方案 »

  1.   

    (30 - 9980 +10000) mod 10000
    对最大值取模小于的做if 写清楚所有情况就行了。
      

  2.   

    (30 - 9980 +10000) mod 10000
    对最大值取模   
    ------------------------------------
    这样的作用是什么呀?有点看不懂,还有,判断是否过圈的读数没办法在程序中写,因为这些是要抄表机进行判断的!
      

  3.   

    (30 - 9980 +10000) mod 10000
     这样写不需要判断是否过圈 
     (10000 +30)  mod  10000  等于 30 mod 10000  =30对于抄错表 小于一个范围可以下个月调整。 或者当时调整这个范围自己确定
      

  4.   

    你可以这样,判断30是否大于9980,如果大于则是没有过圈,如果小于则过圈了
    但这样会有个bug,就是如果人家一个月的用量大于10000,就会认为没有过圈,但这样是比较不可能的。
    你可以设定一个范围,以你的为例,假如抄表员看错了,抄成9930了,你就可以判断9930比9980小,然后9980-9930=50,你可以设定一个范围,比如2000,如果50<2000,则可以提醒抄表员是否看错!
    你说的问题本身就会存在bug,应该在水表上控制,在程式上是控制不了的!假如人家用了10001,水表则会变成9981,你又怎么知道它又没过圈呢?
      

  5.   

    to:jiankehucool() 
    水表的最大读数是由水表口径来确定的,就像你说的,那样判断会有BUG,主要是范围不好设定,不过一般情况下是可以这样的,当发现抄表员抄表的数据比上月抄表数要小时,可以提示是否保存.若不保存则重新抄表,若保存,则说明是过圈的读数,
    这种情况也是在:上月:9*** 本月:** 这时若保存,则一定是过圈的读数,那么可以判断最大读数也就是10000