changeset 19138:f488f4130af3 draft

(svn r23995) -Fix [FS#5079]: Improve rounding when converting display speeds to internal speeds.
author michi_cc <michi_cc@openttd.org>
date Mon, 27 Feb 2012 13:22:38 +0000
parents b1aa5f17b463
children ffa7db45d257
files src/strings.cpp
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -605,12 +605,13 @@
 	/**
 	 * 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 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.