我正在使用订阅行业标准的XML文件。模式的标准文档将其中一个字段定义为有理数,其数据表示为两个整数,通常第二个值为1(例如<foo>20 1</foo>
)。我一直在寻找并没有取得很大的成功,看看是否有一个XML定义的有理数的标准。我确实在XML-SCHEMA的邮件列表上找到了这个(8岁)的交换:
http://markmail.org/message/znvfw2r3a2pfeykl
我不清楚有一种标准的“XML方式”来表示有理数字,以及适用于本文档的标准是否订阅它,或者他们是否已经为自己的文档制作了自己的方式并依靠人们阅读标准。除了说该字段是有理数之外,该文件并不具体。
假设有一种表示有理数的标准方法,并且该文档正确实现它,System.Xml中的功能是否识别它?再次,我的搜索并没有特别富有成效。
感谢任何人的反馈。
答案 0 :(得分:1)
我很高兴他们不接受这个提议作为标准!建议将所有其他数字建立在“有理数”基元上的人从来没有听说过超能数(例如Pi),这些数字不能以这种方式表示
但回到你的问题 - 我只是在xml中遇到有理数,作为与电力行业相关的某些工程价值的RDF规范的一部分。我认为这只是一对用逗号分隔的数字
this document将格式定义为N / M,而另一个引用将其定义为N,M
答案 1 :(得分:1)
您可以在MathML中表达分数。这是行业标准AFAIK。
答案 2 :(得分:1)
这不完全是对XML方面的回答,但是如果你想要一个C#类来表示有理数,我会写一个非常灵活的一段时间作为我的ExifUtils library的一部分(因为大多数EXIF值都表示为有理数。)
类本身是通用的,接受实现IConvertable
的任何类型的分子/分母(包括所有BCL数字类型),并将序列化(ToString)和反序列化(Parse / TryParse),这可能会给你你的确切内容需要你的XML表示。
如果你绝对必须用空格表示有理数,你可以调整它以使用空格' '
作为分隔符,在源中实际上只有一个字符变化。
作为回应Steven Lowe评论的一个稍微偏离主题的话,在看似不直观的情况下使用有理数字有一些优点。 PI等数字也不能表示为十进制/浮点数。 PI的近似值(例如,Math.PI中的值)可以像有理数一样精确表示:
314159265358979323846 / 100000000000000000000
而非常简单的有理数2/3
不可能表示与任何浮点/固定精度十进制数相同的精度:
0.66666666666666666667