Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
11-1255812216
Ruzzz
2009-10-18 00:43
2014.12.28
Почему закомментирована строка TKOLOpenDirDialog


15-1400858649
Kerk
2014-05-23 19:24
2014.12.28
[lytdybr] Free instant messaging


2-1386432858
Sulim4ik
2013-12-07 20:14
2014.12.28
Красно-черные деревья


3-1296112876
TheEd
2011-01-27 10:21
2014.12.28
глюк или не глюк???


2-1386759097
Йа
2013-12-11 14:51
2014.12.28
Delphi, Excel 2007, установить параметры автофильтра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский