C# плавают к десятичному преобразованию

Любой умный способ преобразовать плавание как это:

float f = 711989.98f;

в десятичное число (или дважды), не теряя точность?

Я попробовал:

decimal d = (decimal)f;
decimal d1 = (decimal)(Math.Round(f,2));
decimal d2 = Convert.ToDecimal(f);
14
задан Mac 1 March 2017 в 02:48
поделиться

3 ответа

Слишком поздно, в компиляторе потерялась 8-я цифра. Тип с плавающей запятой может хранить только 7 значащих цифр. Вам придется переписать код, назначив двойное или десятичное, конечно, решит проблему.

13
ответ дан 1 December 2019 в 13:33
поделиться

Вы потеряли точность в тот момент, когда вы написали 711989.98f.

711989,98 является десятичным числом. С помощью f в конце вы просите компилятор преобразовать его в float. Это преобразование не может быть выполнено без потери точности.

Вам, вероятно, понадобится десятичная дробь d = 711989.98m. Это не потеряет точности.

1
ответ дан 1 December 2019 в 13:33
поделиться

вы пробовали?

decimal.TryParse()

http://forums.asp.net/t/1161880.aspx

Нет неявных преобразований между float / двойной и десятичный. Неявные числовые преобразования всегда гарантированно выполняются без потери точности или величины и не вызывают исключения.

1
ответ дан 1 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: