View Full Version : [C]Approssimazione Decimali
dengel_1
05-10-2007, 21:34
// stampa di un decimale con il formato (#.###.###,####)
//
// es:143567,8 --> Risultato: 143.567,80 (approssimazione a due decimali //dopo la virgola, e relativi . ogni 3 cifre prima della virgola...
Vi posto il sorgente...Devo utilizzare le stringhe , quindi dopo aver preso in input il numero decimale, con fprintf diventa una stringa sul quale lavorare
#include <stdio.h>
#include <conio.h>
void inputstampa(void)
{
double c;
char str1[20];
clrscr();
/* Input Carattere con decimale*/
printf("Inserisci un valore decimale: ");
scanf("%lg",&c);
/* Input del carattere sotto forma di stringa*/
sprintf(str1,"%f",c);
*/E ora come faccio ad approssimare a due cifre decimali????
E a inserire i punti ogni 3 cifre?? Aiutatemiii/*
}
printf("%s",str1); // stampiamo per prova la stringa
getch();
}
_Claudio
05-10-2007, 23:19
// stampa di un decimale con il formato (#.###.###,####)
//
// es:143567,8 --> Risultato: 143.567,80 (approssimazione a due decimali //dopo la virgola, e relativi . ogni 3 cifre prima della virgola...
Vi posto il sorgente...Devo utilizzare le stringhe , quindi dopo aver preso in input il numero decimale, con fprintf diventa una stringa sul quale lavorare
Non mi ricordo il comando... però è un'opzione di stampa (%qualcosa) di printf (o sprintf o simili), prova a dare un'occhiata alle pagine dello standard.
È dai tempi del triciclo che non uso più C...
dengel_1
06-10-2007, 15:10
sprintf(str1,"%10.2f",c); // Stampiamo solo due decimali dopo la virgola
Sn riuscito a risolvere parzialmente il mio problema..ora mi rimane solo da mettere dei . (ke fungono quasi da separatori) ogni 3 cifre--qualche idea?:confused:
_Claudio
06-10-2007, 15:26
sprintf(str1,"%10.2f",c); // Stampiamo solo due decimali dopo la virgola
Sn riuscito a risolvere parzialmente il mio problema..ora mi rimane solo da mettere dei . (ke fungono quasi da separatori) ogni 3 cifre--qualche idea?:confused:
Esatto era proprio quello che intendevo per i decimali.
Per troncare le cifre che ricordi io non c'è un qualcosa apposito nelle specifiche, quindi non rimane che convertire la cifra in una stringa e lavorarci.
L'ideale sarebbe creare una funzione stampacifradecimali(int cifra) che ti stampa le cifre come vuoi te.
dengel_1
06-10-2007, 20:54
Un idea su come fare queste righe di codice? Anche se nn sono dentro una funzione..:D
Prova a fare degli shift a destra a gruppi di 3. Per ogni gruppo appena dopo la virgola, prendi il valore e lo converti in stringa e poi ci metti avanti un punto. Questo fino a quando il valore non è <= 0
_Claudio
07-10-2007, 00:17
Un idea su come fare queste righe di codice? Anche se nn sono dentro una funzione..:D
Dunque, ti do una pseudo sintassi:
char* dividi(float numero) la funzione ritorna un puntatore ad un vettore di caratteri (una stringa).
{
cerchi nello standard la funzione che converte un intero in un array di caratteri (prova a cercare itoa o simili)
quindi fai:
temp=(int)numero;
vettore=itoa(numero);
e hai un vettore che contiene il numero in formato caratteri.
poi:
for(int i=0; i<strlen(vettore); i+=3) prendi i caratteri di 3 in 3
{
if(i+3>strlen(vettore)) j=strlen(vettore); se i+3 eccede la lunghezza del vettore di caratteri allora fermati alla fine del vettore nel tagliare
else j=i+3; altrimenti prendi i 3 caratteri successivi
strcpy(ret, vettore, i, j); copia i caratteri dalla posizione i alla posizione j del vettore in ret concatenandoli al contenuto di ret
add('.', ret); aggiungi il punto dopo i 3 caratteri
}
}
Perdonami ma sono parecchio arrugginito nel C, comunque il primo modo di procedere che mi è venuto in mente è questo, non sarebbe male fare ricorsivamente la cosa, e inoltre io ottimizzerei l'if dentro il for.
I numeri decimali invece li gestisci a parte, magari prima del for inserendo la , nella stringa.
dengel_1
07-10-2007, 12:26
Perdonami ma sono parecchio arrugginito nel C
Eh si..la funzione add nn esiste..inolte il compilatore mi segnala che ho inserito troppi parametri in strcpy..e poi devo lavare obbligatoriamente sulle stringhe e nn sui vettori..qualche altre idea?:confused:
_Claudio
07-10-2007, 13:06
Eh si..la funzione add nn esiste..inolte il compilatore mi segnala che ho inserito troppi parametri in strcpy..e poi devo lavare obbligatoriamente sulle stringhe e nn sui vettori..qualche altre idea?:confused:
Le funzioni che ti ho messo sono solo intuitive, la add sarebbe una funzione di concatenamento tra stringe... e in C non c'è il concetto di Stringa, ma ti vettore di caratteri (con terminatore), per questo te l'ho chiamato così. Devi fare un bel lavoretto di spulciamento dello standard mi sa. Comunque l'idea di base della funzione è come te l'ho spiegata io e l'altro utente in breve (è la stessa cosa).
dengel_1
08-10-2007, 19:10
Ragazzi ancora un aiuto...devo sostituire il punto con la virgola (all'interno della stringa)
ho provato a fare questo ma stampa prima la virgola e poi la stringa...come fare?? help
/* Sostituisce il punto con la virgola( per il numero decimale) */
for ( i=0; str1 != 0; i++)
{
if( str1[i] =='.'){
printf(",");
printf("%s",str1);
}
}
_Claudio
08-10-2007, 22:06
Se ho ben capito quello che intendi... prova a fare come ti ho indicato di seguito...
for ( i=0; str1 != 0; i++)
{
if( str1[i] =='.') { printf(","); } //<--PARENTESI GRAFFE INUTILI
printf("%s",str1[i]);
}
Una domanda... come mai la condizione di uscita del ciclo è str1==0? Voglio capire il motivo per farti evitare errori gravi, di solito per sicurezza si usa una diseguaglianza...
dengel_1
09-10-2007, 11:43
for ( i=0; str1[i] != 0; i++)
{
if( str1[i] =='.'){
str1[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
printf("%s",str1);
}
}
_Claudio
09-10-2007, 17:38
for ( i=0; str1[i] != 0; i++)
{
if( str1[i] =='.'){
str1[i]=','; // Ho risolto inserendo nella stringa nell'istante di i la ,
printf("%s",str1);
}
}
Si esatto... così crei la stringa come vuoi e poi la visualizzi, altrimenti puoi visualizzarla mentre la crei, ma non è un buon metodo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.