Not being an expert mathematician myself, I would just make a function, something like this.
Just used a button and 2 fields for testing.
Maybe there is a more elegant solution.
Code: Select all
on mouseUp pMouseButton
put roundSixteenths(fld "input_Field") into fld "result_Field"
end mouseUp
function roundSixteenths pNumber
put trunc(pNumber) * 16 into tSixteenths
put (pNumber - trunc(pNumber)) / 0.0625 into tRemainder
add trunc(tRemainder) to tSixteenths
if tRemainder - trunc(tRemainder) > 0 then add 1 to tSixteenths
return tSixteenths / 16
end roundSixteenths
Or the shorter, but less readable version.
Code: Select all
function roundSixteenths pNumber
put (trunc(pNumber) * 16) + trunc((pNumber - trunc(pNumber)) / 0.0625) into tSixteenths
if pNumber - (tSixteenths /16) > 0 then add 1 to tSixteenths
return tSixteenths / 16
end roundSixteenths
P.S. I just tried Craig's solution, I thought of doing this initially, but if you input 4.375 it returns 4.4375 so you would need to change the line
Code: Select all
return round(var / 0.0625 + 0.5) * 0.0625
to something like
Code: Select all
return round(var / 0.0625 + 0.499999999) * 0.0625
It really depends on the amount of numbers behind the decimal point, using the round function like this could result in some errors, I'm sure they would be negligible, but for no errors at all, I think you will need to do the maths.
Paul