semplice quesito software

salve a tutti! come al solito uno dei miei stupidi problemi che vi presento a seguito di ore perse nel nulla più totale :o

 Serial.print("\n valore load:");
  Serial.println(load);
  Serial.print("load al 90% ha valore di :");
  Serial.println(load * 90 / 100);

dunque con queste 4 linee di codice a monitor seriale mi escono questi valori, che risultano ovviamente sbagliati, e non capisco dove sbaglio.

grazie in anticipo come al solito della pazienza..

.... scommento che 'load' è dichiarata come variabile di tipo 'int', vero ?

Guglielmo

A volte mettere solo un pezzo di codice non basta. Come dice Guglielmo, come è dichiarata load ? int ?
Probabile ma non siamo certi.

Comunque il linguaggio C quando fa operazioni usa i tipi coinvolti nel calcolo a meno di indicazioni diverse.
load=int, 90=int, 100=int quindi usa gli int che possono contenere solo -32768 a +32767
93090=83700 troppo grande per gli int.
Dovrebbe migliorare con (le tonde sono eccessive ma x essere sicuri faccia prima la divisione):
Serial.println( (load / 100) * 90); => int 930/100=9 !! 9
90=810
ma ancora meglio forzare l'uso di virgole
Serial.println(load * 90.0 / 100.0); =>837.00

si ok affondato al primo colpo è proprio un integer, non avevo considerato assolutamente di poter sforare! grazie ragazzi!

nid69ita:
A volte mettere solo un pezzo di codice non basta. ....

grazie molte della spiegazione esaustiva!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.