summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2012-02-27 13:22:38 +0000
committermichi_cc <michi_cc@openttd.org>2012-02-27 13:22:38 +0000
commit89daed858b3930ad2d06e8086a3b83b8e3877e5a (patch)
tree9d1a2e0858b5de3228b75560ed80589ee305f068
parent0559f658254e0f42f7b836e26545436a84047e34 (diff)
downloadopenttd-89daed858b3930ad2d06e8086a3b83b8e3877e5a.tar.xz
(svn r23995) -Fix [FS#5079]: Improve rounding when converting display speeds to internal speeds.
-rw-r--r--src/strings.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/strings.cpp b/src/strings.cpp
index 77174a9ed..a1c147c83 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -605,12 +605,13 @@ struct UnitConversion {
/**
* Convert the displayed value back into a value of OpenTTD's internal unit.
* @param input The input to convert.
- * @param round Whether to round the value or not.
+ * @param round Whether to round the value up or not.
+ * @param divider Divide the return value by this.
* @return The converted value.
*/
- int64 FromDisplay(int64 input, bool round = true) const
+ int64 FromDisplay(int64 input, bool round = true, int64 divider = 1) const
{
- return ((input << this->shift) + (round ? this->multiplier / 2 : 0)) / this->multiplier;
+ return ((input << this->shift) + (round ? (this->multiplier * divider) - 1 : 0)) / (this->multiplier * divider);
}
};
@@ -699,7 +700,7 @@ uint ConvertKmhishSpeedToDisplaySpeed(uint speed)
*/
uint ConvertDisplaySpeedToKmhishSpeed(uint speed)
{
- return _units[_settings_game.locale.units].c_velocity.FromDisplay(speed * 16) / 10;
+ return _units[_settings_game.locale.units].c_velocity.FromDisplay(speed * 16, true, 10);
}
/**
* Parse most format codes within a string and write the result to a buffer.