Форум: "Начинающим";
Текущий архив: 2014.12.28;
Скачать: [xml.tar.bz2];
ВнизСтрока фиксированной ширины с помощью Format Найти похожие ветки
← →
Alex80 (2013-12-06 04:54) [0]Надо вывести вещественное число в виде строки фиксированной ширины. Если это делать так Format("%8.7f" ... , то вне зависимости от того сколько перед запятой знаков, после запятой всегда будет 7 знаков, поэтому фиксированной ширины не получается.
Если Format("%8.7g" ... - то вроде как надо, всегда ширина 8 знаков, но если в конце числа после запятой нули, то она их сотрёт, и получается число укороченное.
Можно вообще добиться фиксированной ширины через Format? Или никак?
← →
Inovet © (2013-12-06 06:09) [1]Посмотри ещё FormatFloat
← →
Jeer © (2013-12-06 10:16) [2]Иногда проще самому ручками, чем в справку лезть:)
function Float2StrFixWidth(v: extended; p,d: integer): string;
var i: integer;
begin
Result := FloatToStrF(v, ffFixed, p+d,d);
i := Pos(#46,Result);
if i > 0 then Result := DupeString(#48, p - i +1 ) + Result;
end;
Длина строки (включая лидирующие нули) перед точкой обеспечивается параметром p, а после точки - d
← →
Alex80 (2013-12-07 08:33) [3]
> Jeer © (06.12.13 10:16) [2]
> Иногда проще самому ручками, чем в справку лезть:)
Получается вот такая байда:
000.10000
001.00000
010.00000
100.00000
1000.00000
1E10
10000000.00000
Куча цифр сдвинута, хотя 1000.00000
и 10000000.00000 вполне могли бы поместиться в заданную ширину.
Плюс спереди зачем-то нули. Куда полезнее показать бОльшую точность после запятой, чем пририсовывать спереди нули.
← →
Alex80 (2013-12-07 08:39) [4]Да, цифры типа "0.00000001" округляются до нуля, хотя могли бы влезть или показываться в виде 1E-8. И опять же 1E-8 - слишком короткая строка.
← →
Jeer © (2013-12-07 13:39) [5]Считай это заготовкой для тебя:)
← →
Юрий Зотов © (2013-12-07 21:54) [6]> Alex80 (06.12.13 04:54)
> Надо вывести вещественное число в виде строки фиксированной
> ширины. Если это делать так Format("%8.7f" ... , то вне
> зависимости от того сколько перед запятой знаков, после
> запятой всегда будет 7 знаков, поэтому фиксированной ширины
> не получается.
Получается, только общую ширину (первое число) надо задавать не 8, а больше (7 знаков дробной части, плюс разделитель - это уже 8 и получается, что места для целой части Вы не оставили). Попробуйте, например, %20.7f (и не забудьте, что нужен моноширинный шрифт).
← →
Дмитрий СС (2013-12-07 23:02) [7]
> i := Pos(#46,Result);
Зачем писать код символа, когда можно сам символ? Любите издеваться над тем, кто потом будет разбираться в вашем коде и над собой?)
← →
Jeer © (2013-12-07 23:08) [8]Лишний тренинг не помешает, а мне проще так - я их наизусть помню:)
← →
Alex80 (2013-12-08 10:18) [9]
> Jeer © (07.12.13 13:39) [5]
> Считай это заготовкой для тебя:)
Мне нужна не заготовка, а готовое. профессиональное решение. Вряд ли я первый кто озадачился этой проблемой.
← →
Alex80 (2013-12-08 10:25) [10]
> Попробуйте, например, %20.7f (и не забудьте, что нужен моноширинный
> шрифт).
Понятно, что если отвести под число километр, то поместится всё, что угодно. Но нужен компактный вывод, чтобы все числа показывались оптимальным образом в заданной ширине.
Например
1234E-9
4 значащих цифры, и степень. Ширина - 7.
← →
Юрий Зотов © (2013-12-08 12:25) [11]> Alex80 (08.12.13 10:25) [10]
Чтобы все числа показывались оптимальным образом, нужно заранее знать их диапазон, а если этот диапазон заранее неизвестен, то придется ориентироваться на максимальный. Например, для чисел double:<знак><d.dddddddddddddd>E<знак><ddd>
что соответствует формату -22.15e
Но лидирующий знак "плюс" придется добавлять руками.
← →
Alex80 (2013-12-08 13:05) [12]
> Чтобы все числа показывались оптимальным образом, нужно
> заранее знать их диапазон, а если этот диапазон заранее
> неизвестен, то придется ориентироваться на максимальный.
Человек задающий ширину сам знает диапазон и точность которая ему нужна. Для меня в 99% случаев хватает трёх-четырёх значащих цифр. А степени за E9 не выходят.
← →
Юрий Зотов © (2013-12-08 13:20) [13]> Alex80 (08.12.13 13:05) [12]
> Человек задающий ширину сам знает диапазон и точность
> которая ему нужна.
Убедили. Задавайте.
> в 99% случаев
В компьютере 99% не бывает. Или сто, или ноль.
← →
Inovet © (2013-12-08 16:29) [14]> [13] Юрий Зотов © (08.12.13 13:20)
> В компьютере 99% не бывает. Или сто, или ноль.
Двоичные они, однако.
← →
sniknik © (2013-12-08 16:52) [15]> Для меня в 99% случаев хватает трёх-четырёх значащих цифр.
ну и сделай тогда 4 значащих, а оставшийся 1% посылай на хрен... что не пойдет? тогда не морочь голову - нужно 100%.
← →
Jeer © (2013-12-08 18:41) [16]>Мне нужна не заготовка, а готовое.
Это на паперти подают, убогим.
← →
Alex80 (2013-12-10 20:21) [17]
> Это на паперти подают, убогим.
Я подаю там где просят.
← →
Jeer © (2013-12-10 21:56) [18]>Я подаю там где просят.
Ну да, только это ты сюда пришел с вопросом, а не наоборот.
Тебе подали.
Иди и думай.
← →
Alex80 (2013-12-11 10:23) [19]
> Jeer © (10.12.13 21:56) [18]
> Тебе подали.
Пока ещё вы лично ничего не подали. Практической пользы - ноль. Зато потерянное время на то, чтобы обнаружить несоответствие вашего кода поставленной задаче.
Зато вы мне тыкнули. Я к вам на вы, а вы мне тыкаете.
← →
Jeer © (2013-12-11 12:40) [20]>Практической пользы - ноль.
Дан пример, как можно подойти к решению задачи. Этого достаточно для включения мозга.
>Зато потерянное время на то
Не теряй время на форумах, думай сам.
Ты/Вы - для меня без разницы. Можешь принять как даность.
Ну и что такое фиксированная ширина?
12.34567
1234.567
123456.7
1234567
Так, что ли?
← →
Jeer © (2013-12-11 12:44) [21]или "1234567."
← →
Jeer © (2013-12-11 13:06) [22]Тогда смотри на такой вариант:)
Copy(tmp, 1, i - 1) + #46 + Copy(tmp, i + 1, w - i);
← →
Inovet © (2013-12-11 13:30) [23]> [20] Jeer © (11.12.13 12:40)
> Так, что ли?
Похоже, не знает что хочет. Или всё понимает, но сказать не может.
← →
Jeer © (2013-12-11 14:06) [24]>Похоже, не знает что хочет. Или всё понимает, но сказать не может.
Это очевидно уже с первого поста, зато требует выказывать уважение и предоставить "профессиональный" код :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.12.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c