Рациональные числа в C # и XML - PullRequest
2 голосов
/ 15 ноября 2008

Я работаю с XML-файлом, который соответствует промышленному стандарту. Стандартный документ для схемы определяет одно из полей как рациональное число, и его данные представлены в виде двух целых чисел, обычно со вторым значением, равным 1 (например, <foo>20 1</foo>). Я без особого успеха пытался выяснить, существует ли определенный в XML стандарт для рациональных чисел. Я нашел этот (8-летний) обмен в списке рассылки для XML-SCHEMA:

http://markmail.org/message/znvfw2r3a2pfeykl

Мне не ясно, существует ли стандартный «способ XML» для представления рациональных чисел и подписывается ли на него стандарт, применяемый к этому документу, или же они разработали свой собственный способ сделать это для своих документов и полагаются на людей, чтобы читать стандарт. Документ не является конкретным, за исключением того, что поле является рациональным числом.

Если существует стандартный способ представления рациональных чисел, и этот документ правильно его реализует, распознает ли его функциональность в System.Xml? Опять же, мои поиски не были особенно плодотворными.

Спасибо за любой отзыв.

Ответы [ 3 ]

1 голос
/ 15 ноября 2008

Вы можете выразить дроби в MathML . Это отраслевой стандарт AFAIK.

1 голос
/ 19 декабря 2009

Это не совсем ответ на XML-сторону вещей, но если вы хотите класс C # для представления рациональных чисел, я некоторое время назад пишу очень гибкий как часть моей библиотеки ExifUtils (поскольку большинство значений EXIF ​​представлены в виде рациональных чисел).

Сам класс является универсальным, принимая числитель / знаменатель любого типа, реализующего IConvertable (который включает в себя все типы чисел BCL), и будет сериализовывать (ToString) и десериализовать (Parse / TryParse), что может дать вам именно то, что вам нужно для ваше XML-представление.

Если вам абсолютно необходимо представить рациональное число с пробелом, вы можете адаптировать его для использования пробела ' ' в качестве разделителя буквально с одним изменением символа в источнике.


Как немного не по теме в ответ на комментарии Стивена Лоу, использование рациональных чисел, в то время как, казалось бы, неинтуитивно, имеет некоторые преимущества. Числа, такие как PI, также не могут быть представлены в виде десятичного числа / числа с плавающей запятой. аппроксимация PI (например, значение в Math.PI) может быть точно так же точно представлена, как рациональное число:

314159265358979323846 / 100000000000000000000

Принимая во внимание, что очень простое рациональное число 2/3 невозможно представить с той же точностью, что и любое другое десятичное число с плавающей запятой / фиксированной точностью:

0.66666666666666666667
1 голос
/ 15 ноября 2008

Я рад, что они не приняли это предложение в качестве стандарта! парень, предлагающий основывать все остальные числа на примитиве «рациональное число», никогда не слышал о трансцендентных числах (например, Pi), которые нельзя представить таким образом

но вернемся к вашему вопросу - я наткнулся на рациональные числа в xml как часть спецификации RDF для определенных технических значений, связанных с энергетикой. Я думаю, что это была просто пара чисел, разделенных запятой

этот документ определяет формат как N / M, в то время как другая ссылка имеет его как N, M

...