Как работает Formatfloat - PullRequest
1 голос
/ 19 мая 2011

В этом коде:

FormatFloat('0.##########',XX.AsFloat)

Если значение XX в базе данных равно 12.12345, какое значение оно вернет?
Число # больше 5 знаков после запятой, поэтому будет ли выполняться дополнительное округление?
Я не могу найти документ для этого FormatFloat.

Я также хотел бы знать, что делает .AsFloat.

1 Ответ

9 голосов
/ 19 мая 2011

Когда я запускаю его, я получаю поиск FormatFloat('0.###########',12.123456) = 12.123456. Таким образом, нет пробелов и лишних нулей. Вы не можете экстраполировать этот один случай на общее правило, потому что есть много значений с плавающей запятой, которые не могут быть представлены точно в двоичном виде. Таким образом, общий ответ таков: вы получите число, по крайней мере с одной цифрой слева от того места, где был бы десятичный знак, и вы либо получите десятичное место и переменное число десятичных знаков справа, либо не будет десятичного знака. место на всех.

Нет разумного способа предсказать это, кроме как иметь глубокие знания о кодировании с плавающей запятой IEEE и ограничениях двоичного числового хранения с плавающей запятой. Попробуйте выше с 1.0, например, и вы получите '1' и без десятичных разрядов.

AsFloat - это метод объекта, и если вы хотите знать, как он реализован, и поскольку вы не сказали нам, что такое тип XX, мы не можем вам этого сказать. Но вам не нужно спрашивать нас, вы можете просто нажать Ctrl + клик по нему.

В другой день, еще одно обращение к Что должен знать каждый учёный об арифметике с плавающей точкой

...