Отговори на тема  [ 8 мнения ] 
C18 и float 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение C18 и float
Искам една float стойност да я покажа на LCD-то. За целта трябва да я преобразувам в стойност от тип char.
Гледам че няма готова функция.
Дайте малко идей.


Вто Окт 07, 2008 12:13 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Яну 04, 2007 12:43 am
Мнения: 178
Мнение 
sprintf()


Вто Окт 07, 2008 2:19 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
printf() също би трябвало да има такава опция ..... поне в CCS има де


Сря Окт 08, 2008 8:50 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Теоретично постановката е : умножаваш флоата по 10,100,1000 в зависимост до кой знак искаш да покажеш, след това си "екстраткваш" по отдделно цифрите от числото (има го описано обширно в една тема как става номера), слагаш си точката на подходящото място и си готов.


Сря Окт 08, 2008 10:16 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
float d;
char outString[8];
sprintf(outString,"%4.3f",d);


Сря Окт 08, 2008 10:58 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 06, 2005 2:06 pm
Мнения: 194
Местоположение: Sofia
Мнение 
До колкото си спомням, С18 не поддържаше %f, CCS и C30 го поддържат. Правил съм го с %d, и преобразуване на цялата и дробната част (до съответния знак) към цяла.


Сря Окт 08, 2008 11:36 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Можеш да направиш следното:
Код:
int whole, rest;
float f;
char string[20];
whole = (int)f; // получаваш цялата част
rest = 100 * ( f - (float)whole ); // получаваш дробната част с точно 2 знака
sprintf(string,"%d.2d", whole, rest ); // разпечатка на дробното число в стринг

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Сря Окт 08, 2008 4:02 pm
Профил WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
¶ написа:
Можеш да направиш следното:
Код:
int whole, rest;
float f;
char string[20];
whole = (int)f; // получаваш цялата част
rest = 100 * ( f - (float)whole ); // получаваш дробната част с точно 2 знака
sprintf(string,"%d.2d", whole, rest ); // разпечатка на дробното число в стринг
:prayer: :supz:


малка корекция:

sprintf(string,"%d.%2d", whole, rest );

още едно допълнение:

if (rest < 10)
{
sprintf(string,"%d.0%d", whole, rest); // разпечатка на дробното число в стринг
}

else
{
sprintf(string,"%d.%2d", whole, rest); // разпечатка на дробното число в стринг
}


Сря Окт 08, 2008 4:50 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни