代码之家  ›  专栏  ›  技术社区  ›  BobC

C#和XML中的有理数

  •  2
  • BobC  · 技术社区  · 16 年前

    我正在处理一个订阅了行业标准的XML文件。模式的标准文档将其中一个字段定义为有理数,其数据表示为两个整数,通常第二个值为1(例如。 <foo>20 1</foo> ). 我一直在四处寻找,但没有取得很大的成功,看看是否有一个XML定义的有理数标准。我确实在XML-SCHEMA的邮件列表中发现了这个(8年前的)交换:

    http://markmail.org/message/znvfw2r3a2pfeykl

    我不清楚是否有一种表示有理数的标准“XML方式”,也不清楚应用于此文档的标准是订阅它,还是他们为自己的文档设计了自己的方式,并依赖于人们阅读该标准。这个文档除了说这个字段是一个有理数之外,没有什么特别之处。

    假设有一种表示有理数的标准方法,并且本文档正确地实现了它,那么System.Xml中的功能能够识别它吗?再说一次,我的搜索也不是特别有成效。

    3 回复  |  直到 16 年前
        1
  •  2
  •   kristianp    7 年前

    这并不完全是对XML方面的回答,但是如果您想要一个表示有理数的C#类,我不久前编写了一个非常灵活的类,作为我工作的一部分 ExifUtils library

    IConvertable (包括所有BCL数字类型)并将序列化(ToString)和反序列化(Parse/TryParse),这可能会为您的XML表示提供所需的确切信息。

    如果你必须用一个空格来表示一个有理数,你可以用空格来调整它 ' ' 作为源代码中具有单个字符的分隔符。


    近似值

    314159265358979323846 / 100000000000000000000
    

    而非常简单的有理数 2/3 无法表示与任何类型的浮点/固定精度十进制数相同的精度:

    0.66666666666666666667
    
        2
  •  1
  •   Steven A. Lowe    16 年前

    我很高兴他们没有接受这个建议作为标准!提议把所有其他数字建立在“有理数”原语上的人从来没有听说过不能用这种方式表示的超越数(比如Pi)

    但是回到你的问题上来-我只在xml中遇到了rational数字,作为RDF规范的一部分,用于与电力行业相关的某些工程值。我想那只是一对用逗号隔开的数字

    this document 将格式定义为N/M,而另一个引用将其定义为N,M

        3
  •  1
  •   Andrew Cowenhoven    16 年前

    MathML . 这是AFAIK的行业标准。