Function nround(tlnvalue, tlnround, tnMode) If Vartype(tnMode) # "N" Or !Inlist(tnMode,0,1) tnMode = 0 Endif *!* tlnvalue = Value to round *!* tlnround = round grade (0.01 0.1 0.5 1.0 5.0 10.0 50.0 100.0 500.0 1000.0) *!* tnMode = type of round *!* tnMode = 1 always up to the nearest *!* tnMode = 0 with normal rounding rules Local ; lnRetVal, ; lnj, ; lnk Do Case Case tlnround = 0.01 && 0.01 lnRetVal = Round(tlnvalue,2) Case tlnround = 0.1 && 0.1 lnRetVal = Round(tlnvalue,1) Case tlnround = 0.5 && 0.5 lnj = Round(tlnvalue,1) lnk = Abs(Int(tlnvalue) - Round(tlnvalue,1)) Do Case Case lnk>= 0 And lnk<0.3 lnk = 0 Case lnk> 0.2 And lnk<0.8 lnk = 0.5 Case lnk> 0.7 And lnk<1 lnk = 1 Endcase lnRetVal = Round(Int(tlnvalue) + lnk,2) Case tlnround = 1.0 && 1.0 lnRetVal = Round(tlnvalue,0) Case tlnround = 5.0 && 5.0 lnj = Round(tlnvalue,0) lnj = lnj/10 lnk = Abs(Int(lnj) - lnj) Do Case Case lnk>= 0 And lnk<0.3 lnk = 0 Case lnk> 0.2 And lnk<0.8 lnk = 0.5 Case lnk> 0.7 And lnk<1 lnk = 1 Endcase lnRetVal = 10*Round(Int(lnj) + lnk,2) Case tlnround = 10.0 && 10.0 lnRetVal = Round(tlnvalue,-2) Case tlnround = 50.0 && 50.0 lnj = Round(tlnvalue,-1) lnj = lnj/100 lnk = Abs(Int(lnj) - lnj) Do Case Case lnk>= 0 And lnk<0.3 lnk = 0 Case lnk> 0.2 And lnk<0.8 lnk = 0.5 Case lnk> 0.7 And lnk<1 lnk = 1 Endcase lnRetVal = 100*Round(Int(lnj) + lnk,2) Case tlnround = 100.0 && 100.0 lnRetVal = Round(tlnvalue,-3) Case tlnround = 500.0 && 500.0 lnj = Round(tlnvalue,-2) lnj = lnj/1000 lnk = Abs(Int(lnj) - lnj) Do Case Case lnk>= 0 And lnk<0.3 lnk = 0 Case lnk> 0.2 And lnk<0.8 lnk = 0.5 Case lnk> 0.7 And lnk<1 lnk = 1 Endcase lnRetVal = 1000*Round(Int(lnj) + lnk,2) Case tlnround = 1000.0 && 1000.0 lnRetVal = Round(tlnvalue,-4) Otherwise lnRetVal = tlnvalue Endcase lnRetVal = lnRetVal+Iif(tnMode=0,0,Iif(tlnvalue>lnRetVal,tlnround,0)) Return lnRetVal Endfunc