вывод float

Нужно вывести на дисплей число с плавающей точкой (в десятичном виде, естественно). Грубо говоря, преобразовать float в строку (три десятичных знака плюс точка, без степеней: типа от 0.01 до 99.9). Подскажите пожалйуста, кто-нибудь, как сделать, а лучше поделитесь сорсом на Си (если есть, а то лениво из асма переделывать).

Reply to
Eugene Zhernovoy
Loading thread data ...

Привет!

Mon Jun 06 2005 21:46, Eugene Zhernovoy wrote to All:

EZ> Hужно вывести на дисплей число с плавающей точкой (в десятичном виде, EZ> естественно). Грубо говоря, преобразовать float в строку (три десятичных EZ> знака плюс точка, без степеней: типа от 0.01 до 99.9). Подскажите EZ> пожалйуста, кто-нибудь, как сделать, а лучше поделитесь сорсом на Си EZ> (если есть, а то лениво из асма переделывать).

А что мудрствовать то, умножил на 1000, преобразовал к целому и вывел со вставкой запятой в нужном месте.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Reply to
Alexander Golov

Hello Alexander.

Mon Jun 06 2005 23:30, Alexander Golov wrote to Eugene Zhernovoy:

EZ>> Hужно вывести на дисплей число с плавающей точкой (в десятичном виде, EZ>> естественно). Грубо говоря, преобразовать float в строку

AG> А что мудрствовать то, умножил на 1000, преобразовал к целому и вывел со AG> вставкой запятой в нужном месте.

Я б ещё спросил, а нужен ли там вообще float? :)

Dimmy.

Reply to
Dimmy Timchenko

Привет Eugene!

06 Jun 05 21:46, Eugene Zhernovoy писал All:

EZ> Hужно вывести на дисплей число с плавающей точкой (в десятичном виде, EZ> естественно). Грубо говоря, преобразовать float в строку (три EZ> десятичных знака плюс точка, без степеней: типа от 0.01 до 99.9). EZ> Подскажите пожалйуста, кто-нибудь, как сделать, а лучше поделитесь EZ> сорсом на Си (если есть, а то лениво из асма переделывать).

sprintf(string, "%1.2f", value);

Или тут есть какой-то подвох? :)

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Старый глюк лучше новых двух...

Reply to
Alex Mogilnikov

Привет Dimmy!

07 Jun 05 14:07, Dimmy Timchenko писал Alex Mogilnikov:

AM>> sprintf(string, "%1.2f", value); AM>> Или тут есть какой-то подвох? :)

DT> Hу, наверное, килобайта четыре лишнего кода. :)

Если он используется, значит нелишний. :)

DT> Вообще, пользоваться DT> такими средствами в мелких встроенных системах, по-моему, дурной тон. DT> Разве что для отладочной печати...

По-моему ничего дурного здесь нет. Во-первых (побуквоедствую маленько), Евгений не уточнял, что его система - мелкая. :) Во-вторых, во многие мелкие по современным меркам системы (у нас например много систем с 512 кбайт ОЗУ, вряд ли кто-то сегодня назовет это крупной системой) легко эти "лишние" 4К проглотят и не поперхнутся. Зато разработчик сможет взять уже готовое и отлаженное библиотечное решение вместо того чтобы заниматься изобретением и отладкой своего. Так что априори считать использование printf дурным тоном - дурной тон. :) Hа религию похоже...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... В системе возможно бесконечное число процессов - до 256.

Reply to
Alex Mogilnikov

Hello Alex.

Wed Jun 08 2005 00:05, Alex Mogilnikov wrote to me:

AM>>> sprintf(string, "%1.2f", value); AM>>> Или тут есть какой-то подвох? :)

DT>> Hу, наверное, килобайта четыре лишнего кода. :)

AM> Если он используется, значит нелишний. :)

А, не люблю я эту хреновину. Типичный пример сделанного на коленке явно _отладочного_ средства: неудобно, небезопасно и "тяжело". Куда приятнее было бы иметь (и в C тоже) оператор конкатенации строк "+" и отдельные функции типа int2str, float2str (на самом деле их может быть много, с разными возможностями). Тогда и реализация получается более красивой и атомарной, и использование более простым и интуитивным:

puts ("On step " + int2str(step) + " value is " + float2str(value) );

И использоваться будут только те функции, которые нужны в данном проекте.

DT>> Вообще, пользоваться такими средствами в мелких встроенных системах, DT>> по-моему, дурной тон. Разве что для отладочной печати...

AM> По-моему ничего дурного здесь нет. Во-первых (побуквоедствую AM> маленько), Евгений не уточнял, что его система - мелкая. :)

Hу, если он такие вопросы задаёт, то на крупное вряд ли замахивается. ;)

AM> Во-вторых, во многие мелкие по современным меркам системы (у нас AM> например много систем с 512 кбайт ОЗУ, вряд ли кто-то сегодня назовет AM> это крупной системой)

Смотря в каком контексте. Для МК типичны единицы килобайт (а то и сотни байт) ОЗУ, и их обычно вполне хватает. Впрочем, если и тут начнут писать программы мышью и делать всё на виртуальных методах... я вообще боюсь представить, во что это может вылиться. Если виндовая программа виснет или трапается, это можно пережить. А если так будет себя вести система управления чем-то серьёзным?

AM> легко эти "лишние" 4К проглотят и не поперхнутся. Зато разработчик AM> сможет взять уже готовое и отлаженное библиотечное решение вместо того AM> чтобы заниматься изобретением и отладкой своего. Так что априори AM> считать использование printf дурным тоном - дурной тон. :) Hа религию AM> похоже...

Прекрасно! Тогда надо писать на Аде. Hичего, что тяжёлая, проглотят и не поперхнутся. Зато надёжность и безопасность - не чета "супу из топора" - C++.

Dimmy.

Reply to
Dimmy Timchenko

Hello, Dimmy Timchenko! You wrote in conference fido7.ru.embedded to Alex Mogilnikov on Wed, 08 Jun 2005 10:57:00

+0400:

DT> А, не люблю я эту хреновину. Типичный пример сделанного на DT> коленке явно _отладочного_ средства: неудобно, небезопасно и DT> "тяжело". Куда приятнее было бы иметь (и в C тоже) оператор

Вполне удобно, и если функциональность используется, то не так и тяжело.

DT> конкатенации строк "+" и отдельные функции типа int2str, DT> float2str (на самом деле их может быть много, с разными DT> возможностями).

Вот sprintf это и делает.

DT> Тогда и реализация получается более красивой и атомарной, и использование более DT> простым и интуитивным: DT> puts ("On step " + int2str(step) + " value is " + float2str(value) );

А теперь подумай, что форматов вывода float есть целая куча, и посмотри к чему приведет твой подход. Скажем сколько знаков выведет твой float2str? в экспоненциальном или нет формате etc.

DT> Смотря в каком контексте. Для МК типичны единицы килобайт (а> то и сотни байт) DT> ОЗУ, и их обычно вполне хватает.

Для printf много ОЗУ не нужно, код в ПЗУ.

AM>> легко эти "лишние" 4К проглотят и не поперхнутся. Зато

Да уже при 32к ПЗУ 4 к - не трагедия.

AM>> разработчик сможет взять уже готовое и отлаженное AM>> библиотечное решение вместо того чтобы заниматься AM>> изобретением и отладкой своего. Так что априори считать AM>> использование printf дурным тоном - дурной тон. :) Hа религию AM>> похоже...

DT> Прекрасно! Тогда надо писать на Аде.

Так пиши, кто тебе не дает?

dima

formatting link

Reply to
Dmitry Orlov

Wed, 08 Jun 2005 10:57:00 +0400 Dimmy Timchenko wrote to Alex Mogilnikov:

[...]

DT> Прекрасно! Тогда надо писать на Аде. Hичего, что тяжёлая, проглотят и не DT> поперхнутся. Зато надёжность и безопасность - не чета "супу из топора" - DT> C++.

При всем уважении, чесслово уже надоели теоретические рассуждения про крутизну Ады и безосновательные наезды на С++. Думаю, что не ошибусь, если скажу, что отсутствие рекламаций по надежности/безопасности/удобству/прожорливости/проч. к Аде в таком количестве как, например, к С++ обусловлено одной-единственной причиной - причиной отсутствия Ады в подавляющем большинстве областей, ее несоизмеримо меньшей распространенности и, как следствие, просто отсутствием достаточного опыта использования. Вот и все. И все эти рассуждения о ее крутизне является не более, чем теориями. Вот когда оно на практике подтвердит свою состоятельность, прочно обосновавшись в своей хотя бы нише, тогда и поговорим. Только, думается, мы этого не дождемся.

Reply to
Harry Zhurov

Hello Dmitry.

Wed Jun 08 2005 20:47, Dmitry Orlov wrote to me:

DT>> А, не люблю я эту хреновину. Типичный пример сделанного на DT>> коленке явно _отладочного_ средства: неудобно, небезопасно и DT>> "тяжело". Куда приятнее было бы иметь (и в C тоже) оператор

DO> Вполне удобно, и если функциональность используется, то не так и тяжело.

Hу, suum quique. Сила привычки - страшная вещь.

DT>> конкатенации строк "+" и отдельные функции типа int2str, DT>> float2str (на самом деле их может быть много, с разными DT>> возможностями).

DO> Вот sprintf это и делает.

DT>> Тогда и реализация получается более красивой и атомарной, и DT>> использование более простым и интуитивным: DT>> puts ("On step " + int2str(step) + " value is " + float2str(value) DT>> );

DO> А теперь подумай, что форматов вывода float есть целая куча, и посмотри к DO> чему приведет твой подход. Скажем сколько знаков выведет твой float2str? в DO> экспоненциальном или нет формате etc.

Я же выше сказал: на самом деле их может быть много, с разными возможностями. В том числе и самому дописать - пара пустяков. Hо сам этот подход отличается принципиально: атомарностью и ортогональностью.

DT>> Прекрасно! Тогда надо писать на Аде.

DO> Так пиши, кто тебе не дает?

Разработчики компиляторов. ;)

Dimmy.

Reply to
Dimmy Timchenko

Hello Harry.

Thu Jun 09 2005 08:52, Harry Zhurov wrote to me:

DT>> Прекрасно! Тогда надо писать на Аде. Hичего, что тяжёлая, проглотят и DT>> не поперхнутся. Зато надёжность и безопасность - не чета "супу из DT>> топора" - C++.

HZ> При всем уважении, чесслово уже надоели теоретические рассуждения HZ> про крутизну Ады и безосновательные наезды на С++.

Ладно-ладно. Кажется, это тебя задевает лично. ;) Постараюсь обходить эти темы.

Dimmy.

Reply to
Dimmy Timchenko

Eugene Zhernovoy пишет: EZ> Нужно вывести на дисплей число с плавающей точкой (в десятичном виде, EZ> естественно). Грубо говоря, преобразовать float в строку (три десятичных EZ> знака плюс точка, без степеней: типа от 0.01 до

99.9). Подскажите EZ> пожалйуста, кто-нибудь, как сделать, а лучше поделитесь сорсом на Си EZ> (если есть, а то лениво из асма переделывать).

int i,j ; float x ; char str[5] ; i=int (x*1000.0+0.5) ; j=i/100 ; i-=(j*100) ; str[0]=j|0x30 ; j=i/10 ; i-=(j*10) ; str[1]=j|0x30 ; str[2]='.' ; str[3]=i|0x30 ; str[4]=0 ; puts (str) ;

Наверное, можно еще смешнее написАть. WBR G.G.

Reply to
Gena Gutnicky

Wed Jun 08 2005 11:57, Dimmy Timchenko wrote to Alex Mogilnikov:

AM>> Если он используется, значит нелишний. :) DT> А, не люблю я эту хреновину. Типичный пример сделанного на коленке явно DT> _отладочного_ средства: неудобно, небезопасно и "тяжело". Куда приятнее DT> было бы иметь (и в C тоже) оператор конкатенации строк "+" и отдельные DT> функции типа int2str,

man asprintf?

DT> float2str (на самом деле их может быть много, с

man atof strtol strtoul atoi strtod atol...?

DT> разными возможностями). Тогда и реализация получается более красивой и DT> атомарной, и использование более простым и интуитивным: DT> puts ("On step " + int2str(step) + " value is " + float2str(value) );

Интуитивного не бывает. В остальном указанное решение подразумевает или возню с динамическим выделением памяти, или тот же printf. Последнее в "маленькой системе" явно более предпочтительно.

DT> И использоваться будут только те функции, которые нужны в данном проекте.

Разве что. Только глядя на исходники printf одной известной фирмы можно сказать, что функций там, пишу по памяти, штуки 3. Возможно что, я согласен, библиотечный printf перегружен ненужными возможностями и неплохо было бы иметь легковесную функцию.

DT> Смотря в каком контексте. Для МК типичны единицы килобайт (а то и сотни DT> байт) ОЗУ, и их обычно вполне хватает. Впрочем, если и тут начнут писать DT> программы мышью и делать всё на виртуальных методах... я вообще боюсь

Ага. Смотри выше свой же пример.

Reply to
Kirill Frolov

Thu Jun 09 2005 10:55, Dimmy Timchenko wrote to Dmitry Orlov:

DT>>> Прекрасно! Тогда надо писать на Аде. DO>> Так пиши, кто тебе не дает? DT> Разработчики компиляторов. ;)

В том смысле, что компиляторов горячо любимой Ады просто нет?

Reply to
Kirill Frolov

Thu, 09 Jun 2005 12:56:40 +0400 Dimmy Timchenko wrote to Harry Zhurov:

DT>>> Прекрасно! Тогда надо писать на Аде. Hичего, что тяжёлая, проглотят и DT>>> не поперхнутся. Зато надёжность и безопасность - не чета "супу из DT>>> топора" - C++.

HZ>> При всем уважении, чесслово уже надоели теоретические рассуждения HZ>> про крутизну Ады и безосновательные наезды на С++.

DT> Ладно-ладно. Кажется, это тебя задевает лично. ;) Постараюсь обходить эти DT> темы.

Ничего личного. Просто оценка "суп из топора" про С++ совершенно неадекватна. Не нравится - не пиши на нем. Но не стОит лажать широкоиспользуемый и мощный инструмент только потому, что тебе кажется, что есть лучше.

Reply to
Harry Zhurov

Нужен, нужен. В вычислениях принимают участие величины с большим разбросом порядков. Так что плавающая запятая неизбежна.

Reply to
Eugene Zhernovoy

Не надо, уже и так смешно. Три операции умножения и две - деления. Нафиг-нафиг.

Reply to
Eugene Zhernovoy

Вывод делается на алфавитно-цифровой LCD, ручками прикрученный к портам. Написал функцию вывода символа. Как прицепить стандартную функцию?

Reply to
Eugene Zhernovoy

Hello, Dimmy Timchenko! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 09 Jun 2005 09:55:32

+0400:

DT>>> А, не люблю я эту хреновину. Типичный пример сделанного на DT>>> коленке явно _отладочного_ средства: неудобно, небезопасно и DT>>> "тяжело". Куда приятнее было бы иметь (и в C тоже) оператор

DO>> Вполне удобно, и если функциональность используется, то не DO>> так и тяжело.

DT> Hу, suum quique. Сила привычки - страшная вещь.

Видимо тебе это средство кажется слишком непривычным.

DT>>> конкатенации строк "+" и отдельные функции типа int2str, DT>>> float2str (на самом деле их может быть много, с разными DT>>> возможностями).

DO>> Вот sprintf это и делает.

DT>>> Тогда и реализация получается более красивой и атомарной, и DT>>> использование более простым и интуитивным: DT>>> puts ("On step " + int2str(step) + " value is " + DT>>> float2str(value));

DO>> А теперь подумай, что форматов вывода float есть целая куча, DO>> и посмотри к чему приведет твой подход. Скажем сколько знаков DO>> выведет твой float2str? в экспоненциальном или нет формате etc.

DT> Я же выше сказал: на самом деле их может быть много, с разными DT> возможностями.

И по-твоему, пользоваться кучей разных функций удобней, чем одной sprintf?

DT> В том числе и самому дописать - пара пустяков. Hо сам этот

Самому и на С пара пустяков написать. Только зачем писать то, что уже написано?

DT> подход отличается принципиально: атомарностью и ортогональностью.

Самому все писать?

DT>>> Прекрасно! Тогда надо писать на Аде.

DO>> Так пиши, кто тебе не дает?

DT> Разработчики компиляторов. ;)

Так к ним и обращайся, к чему тут эти пустые разговоры?

dima

formatting link

Reply to
Dmitry Orlov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dimmy Timchenko on Thu, 9 Jun 2005 09:45:14

+0000 (UTC):

KF> Разве что. Только глядя на исходники printf одной известной KF> фирмы можно сказать, что функций там, пишу по памяти, штуки 3. KF> Возможно что, я согласен, библиотечный printf перегружен KF> ненужными возможностями и неплохо было бы иметь легковесную KF> функцию.

Что в embedded обычно и реализовано.

dima

formatting link

Reply to
Dmitry Orlov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.