[Xfce4-commits] <xfce4-weather-plugin:master> Round temperature to integer value (bug #9318).
Harald Judt
noreply at xfce.org
Sat Nov 3 20:56:01 CET 2012
Updating branch refs/heads/master
to 83d6f0cae1047d3d4d6989dd7aaa16422739e0ce (commit)
from 7dfd6c193d9f2beaeb4005caebf1842a9b45bc3d (commit)
commit 83d6f0cae1047d3d4d6989dd7aaa16422739e0ce
Author: Harald Judt <h.judt at gmx.at>
Date: Sat Nov 3 20:46:28 2012 +0100
Round temperature to integer value (bug #9318).
Round half up for temperatures, according to the "Federal
Meteorological Handbook No. 1 - Surface Weather Observations and
Reports September 2005", chapter 2.6.3 "Rounding Figures",
available at http://www.ofcm.gov/fmh-1/fmh1.htm. As a side-effect,
this approach automatically uses a negative zero "-0" for values
between -0.5 and 0 which is considered important because in the
Celcius scale a value below 0 indicates freezing.
This improves readability and saves space.
The original floating-point value can still be retrieved
via TEMPERATURE_RAW.
panel-plugin/weather-data.c | 20 +++++++++++++++++++-
panel-plugin/weather-data.h | 3 ++-
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/panel-plugin/weather-data.c b/panel-plugin/weather-data.c
index 6650ab3..ca3e804 100644
--- a/panel-plugin/weather-data.c
+++ b/panel-plugin/weather-data.c
@@ -78,6 +78,7 @@ get_data(const xml_time *timeslice,
case LONGITUDE:
return LOCALE_DOUBLE(loc->longitude, "%.4f");
case TEMPERATURE:
+ case TEMPERATURE_RAW:
val = g_ascii_strtod(loc->temperature_value, NULL);
if (unit_system == IMPERIAL &&
(!strcmp(loc->temperature_unit, "celcius") ||
@@ -86,7 +87,24 @@ get_data(const xml_time *timeslice,
else if (unit_system == METRIC &&
!strcmp(loc->temperature_unit, "fahrenheit"))
val = (val - 32.0) * 5.0 / 9.0;
- return g_strdup_printf("%.1f", val);
+ if (type == TEMPERATURE_RAW) {
+ /* We might want to use the raw temperature value of
+ * higher precision for calculations. */
+ return g_strdup_printf("%.1f", val);
+ } else {
+ /*
+ * Round half up for temperatures, according to the
+ * "Federal Meteorological Handbook No. 1 - Surface
+ * Weather Observations and Reports September 2005",
+ * chapter 2.6.3 "Rounding Figures", available at
+ * http://www.ofcm.gov/fmh-1/fmh1.htm. As a side-effect,
+ * this approach automatically uses a negative zero "-0"
+ * for values between -0.5 and 0, which is considered
+ * important, as in the Celcius scale a value below 0
+ * indicates freezing.
+ */
+ return g_strdup_printf("%.0f", val);
+ }
case PRESSURE:
if (unit_system == METRIC)
return LOCALE_DOUBLE(loc->pressure_value, "%.1f");
diff --git a/panel-plugin/weather-data.h b/panel-plugin/weather-data.h
index 14c4ba3..05d680c 100644
--- a/panel-plugin/weather-data.h
+++ b/panel-plugin/weather-data.h
@@ -38,7 +38,8 @@ typedef enum {
CLOUDINESS,
FOG,
PRECIPITATIONS,
- SYMBOL
+ SYMBOL,
+ TEMPERATURE_RAW
} data_types;
typedef enum {
More information about the Xfce4-commits
mailing list