Любой умный способ преобразовать плавание как это:
float f = 711989.98f;
в десятичное число (или дважды), не теряя точность?
Я попробовал:
decimal d = (decimal)f;
decimal d1 = (decimal)(Math.Round(f,2));
decimal d2 = Convert.ToDecimal(f);
Слишком поздно, в компиляторе потерялась 8-я цифра. Тип с плавающей запятой может хранить только 7 значащих цифр. Вам придется переписать код, назначив двойное или десятичное, конечно, решит проблему.
Вы потеряли точность в тот момент, когда вы написали 711989.98f.
711989,98 является десятичным числом. С помощью f в конце вы просите компилятор преобразовать его в float. Это преобразование не может быть выполнено без потери точности.
Вам, вероятно, понадобится десятичная дробь d = 711989.98m. Это не потеряет точности.
вы пробовали?
decimal.TryParse()
http://forums.asp.net/t/1161880.aspx
Нет неявных преобразований между float / двойной и десятичный. Неявные числовые преобразования всегда гарантированно выполняются без потери точности или величины и не вызывают исключения.