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