WPF Прикрепленное свойство MaxValue типа данных double автоматически преобразуется в ближайшее целое число [дубликат]

Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.

Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).

Пример

  var name = p?.Spouse?.FirstName;

эквивалентен:

    if (p != null)
    {
        if (p.Spouse != null)
        {
            name = p.Spouse.FirstName;
        }
    }

В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.

В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.

Для получения дополнительной информации: Операторы с нулевым условием

9
задан jgauffin 29 March 2011 в 14:23
поделиться

3 ответа

Да, decimal предназначен именно для этого.

Однако помните, что диапазон десятичного типа меньше, чем двойной. Это двойное значение может иметь большее значение, но оно делает это, теряя точность. Или, как указано в MSDN:

Ключевое слово decimal обозначает 128-битный тип данных. По сравнению с типами с плавающей запятой десятичный тип имеет большую точность и меньший диапазон, что делает его пригодным для финансовых и денежных расчетов. Примерный диапазон и точность для десятичного типа показаны в следующей таблице.

Основное различие между decimal и double заключается в том, что decimal является фиксированной точкой и double - плавающая точка . Это означает, что десятичное значение сохраняет точное значение, а double представляет значение, представленное дробью, и является менее точным. A decimal - 128 бит, поэтому для сохранения требуется два места. Вычисления на decimal также медленнее (measure!).

Если вам нужна еще большая точность, тогда BigInteger можно использовать из .NET 4. (Вам нужно будет обрабатывать десятичные точки самостоятельно). Здесь вам следует знать, что BigInteger неизменен, поэтому любая арифметическая операция на нем создаст новый экземпляр - если числа большие, это может привести к искажению производительности.

Я предлагаю вам точно посмотреть, как точно вам нужно быть. Возможно, ваш алгоритм может работать с нормализованными значениями, которые могут быть меньше? Если производительность является проблемой, один из встроенных типов с плавающей запятой, вероятно, будет быстрее.

16
ответ дан Callum Linington 27 August 2018 в 15:09
поделиться

В .NET Framework 4 представлена ​​структура System.Numerics.BigInteger, которая может содержать числа с произвольной большой точностью.

4
ответ дан Dave Van den Eynde 27 August 2018 в 15:09
поделиться

Проверьте BigInteger (.NET 4), если вам нужна еще большая точность, чем Decimal.

0
ответ дан Jonas Elfström 27 August 2018 в 15:09
поделиться
Другие вопросы по тегам:

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