[chirp_devel] [PATCH][UV-5R] Add VFO Frequency Presets to Work Mode Tab [#467]

Andrew Errington
Mon Jan 28 03:55:48 PST 2013


On Mon, 28 Jan 2013 19:33:44 Jim Unroe wrote:
> I'm don't believe I understand what "try with integers" means.

Hi there,

Sorry to be so mysterious.

By using integers I mean you should store the frequency as a whole number with 
no decimal part (i.e. an integer).  Integers are handled accurately by Python 
(or any language) but floating point numbers are a 'representation' of the 
number, so they can sometimes differ slightly (although they are usually 
close enough).  The problem you are having seems that 146.940 cannot be 
stored accurately and instead gives you 146.939 (which I think is what you 
meant to write in your message as 146.390 would be *way off*).  As you can 
see, 146.939 is 'close enough'.

So, internally to your code, treat the frequency as an integer, maybe a whole 
number of Hz or kHz.

146.940 MHz is a floating point number.
146940000 Hz is the same value as an integer
146940 kHz is the same value too.

This will always be accurate, and will always convert to a string of digits 
the same as what you thought you stored.  As a programmer you have to 
remember where the decimal point goes when you display the value to the user 
in MHz, which is a good reason for choosing Hz as your unit.  If you are 
constantly juggling between Hz, kHz and MHz you will make a mistake 
somewhere.

When you display it as a string you can insert a decimal point in the right 
place.  When you ask for user input you can treat it as a string of digits, 
strip out the decimal point and convert to an integer number.

Anyway, that's my attempt at explaining my meaning, but I just did a quick 
check in Python and I can accurately store and retrieve the value 146.94 in a 
variable, and convert it to an exact string representation so there must be 
something up somewhere else.  Probably a rounding error somewhere.

73,

Andrew



More information about the chirp_devel mailing list