Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和XML中的有理数_C#_Xml_Rational Numbers - Fatal编程技术网

C#和XML中的有理数

C#和XML中的有理数,c#,xml,rational-numbers,C#,Xml,Rational Numbers,我正在使用一个订阅行业标准的XML文件。模式的标准文档将其中一个字段定义为有理数,其数据表示为两个整数,通常第二个值为1(例如20 1)。我一直在四处寻找,想看看是否有一个XML定义的有理数标准,但没有取得很大成功。我确实在XML-SCHEMA的邮件列表中找到了这个(8年前的)交换: 我不清楚是否有一种表示有理数的标准“XML方式”,也不清楚应用于本文档的标准是否是订阅它,或者他们是否为自己的文档设计了自己的方式,并且依赖于人们阅读该标准。除了说明字段是一个有理数之外,文档没有具体说明 假设有

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

我不清楚是否有一种表示有理数的标准“XML方式”,也不清楚应用于本文档的标准是否是订阅它,或者他们是否为自己的文档设计了自己的方式,并且依赖于人们阅读该标准。除了说明字段是一个有理数之外,文档没有具体说明

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


感谢所有人的反馈。

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

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


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

您可以用它来表示分数。这是行业标准AFAIK。

这并不完全是对XML方面的问题的回答,但是如果您想要一个表示有理数的C#类,我不久前写了一个非常灵活的类作为我的一部分(因为大多数EXIF值都表示为有理数)

  • Rational
类本身是泛型的,接受实现
IConvertable
(包括所有BCL数字类型)的任何类型的分子/分母,并将序列化(ToString)和反序列化(Parse/TryParse),这可能为您的XML表示提供所需的准确信息

如果您绝对必须用空格来表示有理数,您可以对其进行调整,以使用空格
'
作为分隔符,并在源代码中更改单个字符


作为对史蒂文·洛评论的一个稍微离题的回应,使用有理数虽然看似不直观,但也有一些优势。PI等数字也不能表示为十进制/浮点数。PI的近似值(例如Math.PI中的值)可以精确地表示为有理数:

314159265358979323846 / 100000000000000000000
0.66666666666666666667
然而,非常简单的有理数
2/3
不可能表示为与任何类型的浮点/固定精度十进制数相同的精度:

314159265358979323846 / 100000000000000000000
0.66666666666666666667

不要用N,M来表示有理数。世界上许多地方使用逗号作为十进制分隔符。也就是说,1/2=0,5(Dour High Arch):我认为他将不得不使用他的"行业标准"使用的任何表示法,这似乎是一个空间!!