summaryrefslogtreecommitdiff
path: root/gpsdclient.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2016-07-21 21:31:33 -0700
committerGary E. Miller <gem@rellim.com>2016-07-21 21:31:33 -0700
commit7da1b0a116cdd084277fc1da77e050e292632152 (patch)
treecac3ee53e3a9c8104c8be65878c9b9c53b815d0d /gpsdclient.c
parent6cadc981921edb2aeef9cdf7e6e8640e1ce99935 (diff)
downloadgpsd-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.c14
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;
}