istediğim formatta float basamıyorum

Başlatan berkay_91, 26 Mayıs 2015, 21:52:42

berkay_91

mrb arkadaşlar, for döngüsündeki "i=6" olduğunda LCD de 9.90 görüyorum oysaki amacım  09.9 basmak diğer sayılarda olduğu gibi bu formatı korumam gerek [10.5, 10.4,...10.1] ne yapmam gerekiyor?

/*
 * GccApplication1.c
 *
 * Created: 26.05.2015 21:28:19
 *  Author: BERKAY
 */ 


#define F_CPU 1000000UL
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd.h"

volatile float x=10.5;

FILE lcd_str = FDEV_SETUP_STREAM(lcd_putc, NULL, _FDEV_SETUP_WRITE);


int main(void){
	
	DDRB=0XFF;
	
	lcd_init(LCD_DISP_ON); //lcd'yi hazirla

	stdout = stdin = &lcd_str;

	lcd_clrscr();

	while(1){
		
		for (int i=0; i<7; i++){
		
		lcd_gotoxy(2,0);
		printf("%2.1f",x);
		
		x-=0.1;
		
		_delay_ms(400);
		
		}
		
		x=10.5;		
		
		
	}
	return 0;
}

RaMu

printf("%2.1f",x);

yerine
printf("%02.1f",x);

Deneyebilir misin.

Atmelde işe yarar mı bilmiyorum.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

berkay_91

onu denemiştim hiç işe yaramadı, sayı eğer float değilde int olsaydı bu işe yarardı ama bunda yaramıyor

RaMu

#3
Sayıyı string e çevirip kurcalanabilir ama
kulağını tersten göstermek gibi olur.( sprintf )
float32 sayıya pointer atanıp
4 tane int8 elde edilebilir.

ikisini ve ilk mesajda söylediğimide CcsC de denemiştim
hepsi olumlu sonuç veriyor.
Ama atmel kullanmadım sayılır.

mesaj birleştirme:: 26 Mayıs 2015, 22:19:22

Birde
printf("%02f.1",x);

veya
printf("%02f1",x);

yazınca derlenebiliyor mu?

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

berkay_91

derleniyor ama basamak sayısı hem uzuyor hemde yine 09.9 oluşmuyor ilgilendiğiniz için sağolun

mehmet

printf("%02.1f",x);

Olabilir mi acaba?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mufitsozen

Alıntı yapılan: berkay_91 - 26 Mayıs 2015, 22:48:56
derleniyor ama basamak sayısı hem uzuyor hemde yine 09.9 oluşmuyor ilgilendiğiniz için sağolun

Gittim dedim ama bu konu 2 saatir ugrasilacak bir konu olmadigi icin dayanamadim.

formatinizdaki uzunluk yeterli degil o yuzden ondeki sifir cikmiyor.

    printf("%04.1f", 9.9);

diye deneyiniz!
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

berkay_91

mufitsozen bey dediğiniz işe yaradı teşekkürler...

berkay_91

#8
float basmayla ilgili bir küçük sorum daha olucak, aşağıdaki programda butona basıp negatif değerlere ulaştığımda LCD de resimdeki gibi
-1.5, -2.5, -3.5... değerler görüyorum oysa ki amacım negatif sayılarıda pozitif sayılardaki gibi (02.5, 01.5) formatlamak. yani tam kısmı tek haneli negatif sayıları basarken (-) işaretinden sonra önce sıfırı sonra rakamı sonrada ondalık hanesini basmak istiyorum nasıl yaparım?

#define F_CPU 1000000UL
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd.h"

void print_freq_lcd(long int);

volatile float f=2.5;

FILE lcd_str = FDEV_SETUP_STREAM(lcd_putc, NULL, _FDEV_SETUP_WRITE);

int main(void){
	
	DDRB=0XFF;
		
	lcd_init(LCD_DISP_ON); //lcd'yi hazirla

	stdout = stdin = &lcd_str;
    
    lcd_clrscr();
	
	lcd_gotoxy(3,0);
	lcd_puts("FLOAT TEST");
	
	lcd_gotoxy(0,1);
	printf("%04.1f",f);
	
	for(;;){
	
	if(bit_is_set(PINC,0)){
	f-=1;
	lcd_gotoxy(0,1);
	printf("%04.1f",f);
	}	
	
	_delay_ms(400);
	
	}
	
	return 0;
}





engerex

#9
printf("%04.1f",f);
yerine
f sıfırdan küçükse printf("-%04.1f",ABS(f)); f sıfıra eşit veya buyukse printf("%04.1f",f);
Doğru mu yazdım bilmiyorum.

berkay_91

printf("-%04.1f",abs(f)); ve türevlerini denedim olmadı

mufitsozen

Alıntı yapılan: berkay_91 - 16 Temmuz 2015, 22:35:00
printf("-%04.1f",abs(f)); ve türevlerini denedim olmadı


Alıntı Yapint main(void)
{
    float arti, eksi;
    arti=2.5;
    eksi=-3.5;

    printf("\n %+05.1f", arti);
    printf("\n %+05.1f", eksi);


    printf("\n -O-");

    return 0;
}

ciktisi:
Alıntı Yap
+02.5
-03.5
-O-
Process returned 0 (0x0)   execution time : 0.012 s
Press any key to continue.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

engerex

Basamak sayısını bir arttırmayı dene.

berkay_91

mufitsozen bey dediğiniz yine işe yaradı çok sağolun

mufitsozen

#14
Alıntı yapılan: berkay_91 - 17 Temmuz 2015, 00:47:29
mufitsozen bey dediğiniz yine işe yaradı çok sağolun

birsey değil..de :

bir sicrarsin cekirge !,
iki sicrarsin cekirge
.....
ucuncu sicramadan once, printf deki format cumlelerinin butun ozelliklerini Allah askina OKU cekirge!! :)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.