Учитывая, что никто не упомянул об этом ...
Некоторые языки высокого уровня, такие как Python и Java, поставляются с инструментами для преодоления ограничений двоичной с плавающей запятой. Например:
decimal
Python [и g0] и класс BigDecimal
Java [], которые представляют числа внутри с десятичной нотацией (в отличие от двоичная запись). Оба имеют ограниченную точность, поэтому они все еще подвержены ошибкам, однако они решают наиболее распространенные проблемы с бинарной арифметикой с плавающей запятой. Десятичные числа очень хороши при работе с деньгами: десять центов плюс двадцать центов всегда ровно тридцать центов: >>> 0.1 + 0.2 == 0.3
False
>>> Decimal('0.1') + Decimal('0.2') == Decimal('0.3')
True
Модуль decimal
Python основан на стандарте IEEE стандарта 802.118 . fractions
модуль и класс Apache Common BigFraction
. Оба представляют собой рациональные числа как пары (numerator, denominator)
, и они могут давать более точные результаты, чем десятичная арифметика с плавающей запятой. Ни одно из этих решений не идеально (особенно, если мы смотрим на выступления, или если мы требуют очень высокой точности), но все же они решают большое количество проблем с двоичной арифметикой с плавающей запятой.
Не используйте разделители регулярных выражений:
name = Regex.Replace(name, @"\W", "");
В C # вы не можете использовать разделители регулярных выражений, поскольку синтаксис объявления обычного выражения отличается от синтаксиса PHP, Perl или JavaScript или других, которые поддерживают <action>/<pattern>(/<substituiton>)/modifiers
regex.
Просто, чтобы избежать путаницы в терминологии: встроенные модификаторы (принудительный поиск без учета регистра, многострочный, одинарный, многословный и другие режимы), безусловно, поддерживаются и могут использоваться вместо соответствующих флагов RegexOptions
(хотя число возможных флагов RegexOptions
выше, чем число встроенных модификаторов). Тем не менее, regex delimiters вообще не влияют на шаблон регулярного выражения, они являются лишь частью синтаксиса объявления и не влияют на сам шаблон. Скажем, они являются просто альтернативой для ;
или строк, разделяющих строки новой строки.
В C # разделители регулярных выражений не нужны и, следовательно, не поддерживаются. Perl-стиль s/\W//g
будет записан как var replaced = Regex.Replace(str, @"\W", string.Empty);
. И так далее.