Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форматирование группы float / 13 сообщений из 13, страница 1 из 1
03.12.2021, 12:27
    #40116988
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Есть такая конструкция
Код: pascal
1.
Format('%.2f %.2f, %.2f', [Val1, Val2, Val3], FormatSettings)


это мне не нравится тем, что в строке могут появляться завершающие нули

Такая конструкция
Код: pascal
1.
Format('%.2g %.2g, %.2g', [Val1, Val2, Val3], FormatSettings)

не устраивает категорически, т.к. precission для general формата - это общее количество цифр, а не только десятичных.

Чем можно заменить? Все, что придумал - это такой вариант
Код: pascal
1.
2.
3.
4.
5.
Format('%s %s %s', [
    FloatToStrF(Val1, ffGeneral, 18, 2, FormatSettings),
    FloatToStrF(Val2, ffGeneral, 18, 2, FormatSettings),
    FloatToStrF(Val3, ffGeneral, 18, 2, FormatSettings)
])

с последующим выносом
Код: pascal
1.
FloatToStrF(Val3, ffGeneral, 18, 2, FormatSettings)

в отдельную функцию. Ничего красивее нет?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
03.12.2021, 12:41
    #40117001
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Недотестировал
_Vasilisk_
Код: pascal
1.
FloatToStrF(Val3, ffGeneral, 18, 2, FormatSettings)

нифига не обрезает до двух десятичных символов.

Тогда такой вопрос: как преобразовать float в строку, чтобы в итоге в строке было не более N десятичных значащих цифр?
...
Рейтинг: 0 / 0
03.12.2021, 12:42
    #40117003
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Вроде
Код: pascal
1.
FormatFloat('0.##', AVal);

работает
...
Рейтинг: 0 / 0
03.12.2021, 18:01
    #40117129
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
_Vasilisk_,

поговорил сам с собой, молодец :-)
...
Рейтинг: 0 / 0
03.12.2021, 21:32
    #40117224
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
asutp2
поговорил сам с собой, молодец :-)
Исходный вопрос остался. Можно ли заставить работать Format()
...
Рейтинг: 0 / 0
06.12.2021, 17:36
    #40117855
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Format достаточно тупой в этом плане.
Кстати, ты так и не объяснил, чего от него хочешь.
...
Рейтинг: 0 / 0
06.12.2021, 18:45
    #40117877
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
_Vasilisk_
Чем можно заменить? Все, что придумал - это такой вариант

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

Если бы такая потребность у меня была бы регулярной, то я придумал бы какой-нибудь MyFormat, который делал бы этот FloatToStrF перед вызовом стандартного. Либо тупо для всех float-параметров, либо по наличию "своего" модификатора в форматной строке.
...
Рейтинг: 0 / 0
06.12.2021, 19:23
    #40117893
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Fr0sT-Brutal
Кстати, ты так и не объяснил, чего от него хочешь.
_Vasilisk_
преобразовать float в строку, чтобы в итоге в строке было не более N десятичных значащих цифр?
Только не для одного числа а для нескольких со всеми плюшками Format
...
Рейтинг: 0 / 0
06.12.2021, 20:12
    #40117908
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
_Vasilisk_
это мне не нравится тем, что в строке могут появляться завершающие нули
если это не о "Null-terminated string", тогда к чтобы в итоге в строке было не более N десятичных значащих цифр?
нужно добавить " но не было нулей в конце числа после запятой". Так?
...
Рейтинг: 0 / 0
06.12.2021, 20:30
    #40117915
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Bred eFeM
но не было нулей в конце числа после запятой
Это и называется значащие цифры

Для N = 3
1.1234567 =>1.123
1.1200345 => 1.12
1 => 1
1.99999 => 2
...
Рейтинг: 0 / 0
06.12.2021, 22:18
    #40117936
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
ЗНАЧАЩИЕ ЦИФРЫ — в приближенных вычислениях все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться. Напр., в записи результата взвешивания 0,03020 кг значащими цифрами будут 3, 0, 2 и 0 … Большой Энциклопедический словарь
Для N = 3
1.1234567 =>1.123
1.1200345 => 1.12
1 => 1
1.99999 => 2

Это называется "сокрытие информации" )))
...
Рейтинг: 0 / 0
07.12.2021, 13:24
    #40118090
DHDD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    s := '%.4g';
    showmessage(
        Format(s, [1.1234567])
        +sLineBreak+
        Format(s, [1.1200345])
        +sLineBreak+
        Format(s, [1.0])
        +sLineBreak+
        Format(s, [1.99999])
    );


Output:
1,123
1,12
1
2
...
Рейтинг: 0 / 0
07.12.2021, 13:27
    #40118093
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование группы float
DHDD,
Код: pascal
1.
 Format('%.4g', [123.1234567])
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форматирование группы float / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]