Используйте Decimal
вместо ffGeneral
.
18
игнорирует Decimal
параметр.
Когда вы используете 2
, ffFixed
вы говорите, что хотите 18 значащих десятичных цифр. Затем подпрограмма выражает это число кратчайшим образом, используя научную нотацию, если это необходимо. Это 2
игнорируется.
Когда вы используете 2
, вы говорите, что вам нужны 2
цифры после десятичной точки.
Если вам интересно, почему вы иногда получаете значения, которые кажутся неточными, на этом сайте можно найти много других, и другие объяснят, как работают числа с плавающей запятой.
В этом случае AsFloat
возвращается a double
, который, как (большинство) других форматов с плавающей запятой, сохраняет свое значение в двоичном формате. Точно так же, как 1/3 не может быть записано в десятичной форме с конечными цифрами, ни 15.6 не могут быть представлены в двоичном виде в конечном числе бит. Система выбирает максимально возможное значение, которое может быть сохранено в a double
. Точное значение в десятичной форме:
15,5999999999999996447286321199499070644378662109375
Если бы вы запросили 16 цифр точности, значение было бы округлено до 15.6. Но вы просили 18 цифр, так что вы получите 15.5999999999999996.