Fixed floating point arithmetic when type casting.

See http://stackoverflow.com/questions/1989708/type-casting-with-printf-statements-under-mac-osx-and-linux
This commit is contained in:
Federico Hernandez 2010-01-01 23:58:15 +01:00
parent be75b4bf3a
commit 93067f3c3b

View file

@ -168,27 +168,27 @@ std::string formatSeconds (time_t delta)
sprintf (formatted, "%.1f yrs", (days / 365)); // TODO i18n sprintf (formatted, "%.1f yrs", (days / 365)); // TODO i18n
else if (delta > 86400 * 84) else if (delta > 86400 * 84)
sprintf (formatted, "%1d mth%s", // TODO i18n sprintf (formatted, "%1d mth%s", // TODO i18n
(int) (days / 30.6), (int) (float) (days / 30.6),
((int) (days / 30.6) == 1 ? "" : "s")); // TODO i18n ((int) (float) (days / 30.6) == 1 ? "" : "s")); // TODO i18n
else if (delta > 86400 * 13) else if (delta > 86400 * 13)
sprintf (formatted, "%d wk%s", // TODO i18n sprintf (formatted, "%d wk%s", // TODO i18n
(int) (days / 7.0), (int) (float) (days / 7.0),
((int) (days / 7.0) == 1 ? "" : "s")); // TODO i18n ((int) (float) (days / 7.0) == 1 ? "" : "s")); // TODO i18n
else if (delta >= 86400) else if (delta >= 86400)
sprintf (formatted, "%d day%s", // TODO i18n sprintf (formatted, "%d day%s", // TODO i18n
(int) days, (int) days,
((int) days == 1 ? "" : "s")); // TODO i18n ((int) days == 1 ? "" : "s")); // TODO i18n
else if (delta >= 3600) else if (delta >= 3600)
sprintf (formatted, "%d hr%s", // TODO i18n sprintf (formatted, "%d hr%s", // TODO i18n
(int) (delta / 3600), (int) (float) (delta / 3600),
((int) (delta / 3600) == 1 ? "" : "s")); // TODO i18n ((int) (float) (delta / 3600) == 1 ? "" : "s")); // TODO i18n
else if (delta >= 60) else if (delta >= 60)
sprintf (formatted, "%d min%s", // TODO i18n sprintf (formatted, "%d min%s", // TODO i18n
(int) (delta / 60), (int) (float) (delta / 60),
((int) (delta / 60) == 1 ? "" : "s")); // TODO i18n ((int) (float) (delta / 60) == 1 ? "" : "s")); // TODO i18n
else if (delta >= 1) else if (delta >= 1)
sprintf (formatted, "%d sec%s", // TODO i18n sprintf (formatted, "%d sec%s", // TODO i18n
(int) delta, (int) delta,
((int) delta == 1 ? "" : "s")); // TODO i18n ((int) delta == 1 ? "" : "s")); // TODO i18n
else else
strcpy (formatted, "-"); // no i18n strcpy (formatted, "-"); // no i18n
@ -203,13 +203,13 @@ std::string formatSecondsCompact (time_t delta)
char formatted[24]; char formatted[24];
float days = (float) delta / 86400.0; float days = (float) delta / 86400.0;
if (delta >= 86400 * 365) sprintf (formatted, "%.1fy", (days / 365)); // TODO i18n if (delta >= 86400 * 365) sprintf (formatted, "%.1fy", (days / 365)); // TODO i18n
else if (delta >= 86400 * 84) sprintf (formatted, "%1dmo", (int) (days / 30.6)); // TODO i18n else if (delta >= 86400 * 84) sprintf (formatted, "%1dmo", (int) (float) (days / 30.6)); // TODO i18n
else if (delta >= 86400 * 13) sprintf (formatted, "%dwk", (int) (days / 7.0)); // TODO i18n else if (delta >= 86400 * 13) sprintf (formatted, "%dwk", (int) (float) (days / 7.0)); // TODO i18n
else if (delta >= 86400) sprintf (formatted, "%dd", (int) days); // TODO i18n else if (delta >= 86400) sprintf (formatted, "%dd", (int) days); // TODO i18n
else if (delta >= 3600) sprintf (formatted, "%dh", (int) (delta / 3600)); // TODO i18n else if (delta >= 3600) sprintf (formatted, "%dh", (int) (float) (delta / 3600)); // TODO i18n
else if (delta >= 60) sprintf (formatted, "%dm", (int) (delta / 60)); // TODO i18n else if (delta >= 60) sprintf (formatted, "%dm", (int) (float) (delta / 60)); // TODO i18n
else if (delta >= 1) sprintf (formatted, "%ds", (int) delta); // TODO i18n else if (delta >= 1) sprintf (formatted, "%ds", (int) delta); // TODO i18n
else strcpy (formatted, "-"); else strcpy (formatted, "-");
return std::string (formatted); return std::string (formatted);