It all started with these simple lines of code:
string s = "16.9"; double d = Convert.ToDouble(s); d*=100;
The result should be 1690.0, but it is not. d is 1689.999999999999998. All I want to do is round the double value to 2 digits after the decimal separator. Here is my function.
private double RoundFloat(double Value) { float sign = (Value < 0) ? -0.01f : 0.01f; if (Math.Abs(Value) < 0.00001) Value = 0; string SVal = Value.ToString(); string DecimalSeparator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; int i = SVal.IndexOf(DecimalSeparator); if (i > 0) { int SRnd; try {
But again, the problem is, converting from string to double does not work as I want. The workaround for this problem is to associate β00001β with the string, and then use the Math.Round function (commented on in the example above).
This double value, multiplied by 100 (as an integer), is sent to the device (cash register), and these values ββmust be correct.
I am using VS2005 + .NET CF 2.0
Is there an even more "elegant" solution, I am not satisfied with this.
source share