delphi как сохранить значение single c округление до 2 цифр после запятой в компоненте
Создал компонент
TTestSingle = class (TComponent)
private
FValue: Single;
published
property Value: Single read FValue write FValue;
end;
Повесил на форму задал значение 1,222 при сохранение получаю лишние цифры после запятой как убрать это. Getter Setter писать для каждого поля?
Ответы (1 шт):
Все беды от того, что по стандарту записи чисел с точкой (IEEE-754), которому обычно все следуют, 1,2222 не представимо в числе с плавающей точкой (типа Single/Double/Real/Extended в Делфи).
Например, для типа Single, можно точно получить только
1.222199916839599609375 // предыдущее
1.22220003604888916015625
1.2222001552581787109375 // следующее
Доп.инфо - https://ru.stackoverflow.com/a/1477809/177188
Учтите, что даже если вы напишете свой геттер, и будете в нем округлять до 4 знаков после точки, число все равно не будет равно 1,2222(0), а будет ближайшее к нему, а IDE это от вас просто скроет.
Соответственно, что вы можете сделать:
- не обращать внимания и работать с числами с точкой как того требует ваша программа, сравнивая и округляя их по месту
- использовать другой тип для хранения данных (например строки или Integer * 10000)
- как верно подсказали в комментариях, можно попробовать тип Currency (он дает 4 фиксированных знака после точки)
P.S. Более точный ответ дать затруднительно, т.к. надо разбираться, "что вам на самом деле нужно, а не чего вам кажется, что вы хотите".
