Как указать maxExclusive на структуру? - PullRequest
0 голосов
/ 25 августа 2009

Я хочу создать структуру Degrees для библиотеки GPX . В XSD для GPX ( Схема GPX 1.1 ) degreesType определяется как minInclusive = 0 и maxExclusive = 360. Структура теперь должна иметь два открытых статических поля MinValue = 0 и MaxValue = x

public struct Degrees : IFormattable, IComparable, IComparable<Degrees>, IEquatable<Degrees>
{
    private decimal value;

    public static Degrees MinValue = 0M;
    //public static Degrees MaxValue = x;
}

Каков наилучший способ указать значение x? 360D-1 был бы неточным, 360D-0,001 - предположением, что никто никогда не хочет лучшей точности, чем 1/1000 градусов.

1 Ответ

1 голос
/ 25 августа 2009

Я могу придумать два подхода:

  • Правильно представляйте свою структуру тот факт, что диапазон указан с включающим минимумом и эксклюзивный максимум; дайте структура MinInclusive и MaxExclusive члены. Это может рассматриваться как учить свою структуру слишком много о детали реализации XSD, хотя

  • Определите MaxValue как самое высокое представимое значение decimal меньше 360. Поскольку decimal является десятичным типом с плавающей запятой, мы должны быть здесь немного осторожнее, но я думаю Я прав, говоря, что, поскольку наименьшее возможное значение равно 10^-28, а с 360 у нас есть две степени десяти слева от десятичной запятой, соответствующее значение равно 360 - 10^-26 или

    const decimal MaxValue = 359.99999999999999999999999999m;
    

    Полагаю, вы позаботились о конвертации из decimal в Degree. Обратите внимание, что символ объявления типа для decimal равен m или M - d или D для double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...