diff options
author | Gary E. Miller <gem@rellim.com> | 2016-07-21 21:31:33 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2016-07-21 21:31:33 -0700 |
commit | 7da1b0a116cdd084277fc1da77e050e292632152 (patch) | |
tree | cac3ee53e3a9c8104c8be65878c9b9c53b815d0d /gpsdclient.c | |
parent | 6cadc981921edb2aeef9cdf7e6e8640e1ce99935 (diff) | |
download | gpsd-7da1b0a116cdd084277fc1da77e050e292632152.tar.gz |
Show a bit more precision in deg_to_str()
cm accuracy need a bit more than 7 digits of decimal degrees.
Diffstat (limited to 'gpsdclient.c')
-rw-r--r-- | gpsdclient.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/gpsdclient.c b/gpsdclient.c index b98f5265..70093b4a 100644 --- a/gpsdclient.c +++ b/gpsdclient.c @@ -35,7 +35,7 @@ static struct exportmethod_t exportmethods[] = { * deg_ddmm : return DD MM.mmmmmm' * deg_ddmmss : return DD MM' SS.sssss" * - * for cm level accuracy we need degrees to 7 decimal places + * for cm level accuracy we need degrees to 7+ decimal places * Ref: https://en.wikipedia.org/wiki/Decimal_degrees * */ @@ -53,20 +53,20 @@ char *deg_to_str(enum deg_str_type type, double f) fmin = modf(f, &fdeg); deg = (int)fdeg; - frac_deg = (long)(fmin * 10000000); if (deg_dd == type) { - /* DD.ddddddd */ - /* cm level accuracy requires the %07ld */ - (void)snprintf(str, sizeof(str), "%3d.%07ld", deg, frac_deg); + /* DD.dddddddd */ + /* cm level accuracy requires the %08ld */ + frac_deg = (long)(fmin * 100000000); + (void)snprintf(str, sizeof(str), "%3d.%08ld", deg, frac_deg); return str; } fsec = modf(fmin * 60, &fmin); min = (int)fmin; - sec = (int)(fsec * 1000000.0); if (deg_ddmm == type) { - /* DD MM.mmmm */ + /* DD MM.mmmmmm */ + sec = (int)(fsec * 1000000.0); (void)snprintf(str, sizeof(str), "%3d %02d.%06d'", deg, min, sec); return str; } |