如何在结构上指定 maxExclusive?

发布于 2024-08-03 09:53:23 字数 810 浏览 5 评论 0原文

我想为 GPX 库创建一个结构 Degrees 。在 GPX 的 XSD 中 (GPX 1.1 Schema) DegreesType 定义为 minInclusive = 0 和 maxExclusive = 360。结构现在应有两个公共静态字段 MinValue = 0MaxValue = 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 度更好的精度。

I want to create a structure Degrees for a GPX library. In the XSD for GPX (GPX 1.1 Schema) degreesType is defined as minInclusive = 0 and maxExclusive = 360. The structure now shall have two public static fields MinValue = 0 and MaxValue = x:

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

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

What is the best way to specify the value of x? 360D-1 would be to inaccurate, 360D-0.001 would be an assumption that no one ever wants a better accuracy than 1/1000 degree.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

友谊不毕业 2024-08-10 09:53:23

我可以想到两种方法:

  • 让你的结构忠实地代表
    指定范围的事实
    具有包容性最小值和
    独占最大;即,给你的
    结构体 MinInclusiveMaxExclusive
    成员。这可能被视为
    教你的结构太多
    XSD 的实现细节,
    尽管

  • MaxValue定义为小于360的最高可表示decimal值。由于decimal是十进制浮点类型,因此我们必须这里有点小心,但我认为我的说法是对的,因为最小的可能值是10^-28,并且对于 360,我们有 10 的 2 次方小数点左边,相关值为 360 - 10^-26

    const 小数 MaxValue = 359.99999999999999999999999999m;
    

    我假设您正在处理从十进制的转换。请注意,decimal 的类型声明字符为 mM - dD > 代表 double

I can think of two approaches:

  • Have your struct faithfully represent
    the fact that the range is specified
    with an inclusive minimum and an
    exclusive maximum; ie, give your
    struct MinInclusive and MaxExclusive
    members. This might be regarded as
    teaching your struct too much about
    the implementation detail of the XSD,
    though

  • Define MaxValue as the highest representable decimal value less than 360. Since decimal is a decimal floating point type, we have to be a little careful here, but I think I'm right in saying that since the smallest possible value is 10^-28, and with 360 we have two powers of ten to the left of the decimal point, the relevant value is 360 - 10^-26, or

    const decimal MaxValue = 359.99999999999999999999999999m;
    

    I assume you're taking care of the conversion from decimal to Degree. Note that the type declaration character for decimal is m or M - d or D is for double.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文