самый безопасный способ поставить! для отрицания регулярного выражения в [[]]
следующим образом:
, если [[! $ {STR} = ~ YOUR_REGEX]]; то
в противном случае он может выйти из строя в определенных системах.
Вторая строка дает вам точное десятичное значение двоичного числа с плавающей запятой, которое приблизительно равно 114,3. Это почти все о двоичной с плавающей запятой, а не о десятичном. Подробнее см. В docs .
Позже: при использовании Python 3, см. эти документы . Та же самая основная вещь, но у Python 3 есть больше инструментов, которые помогут вам исследовать случаи «как это».
Когда вы выполняете Decimal(114.3)
, вы создаете регулярный объект с плавающей точкой и затем передаете его в десятичный. Точность теряется из-за двоичной неточности с плавающей запятой, когда создается float 114.3, прежде чем Decimal когда-либо ее увидит. Невозможно вернуть эту точность. Вот почему Decimal принимает строковые представления как входные данные, поэтому он может видеть, что вы на самом деле набрали, и использовать правильный уровень точности.