Ansicht:   

#156568 C - seltsamer Rundungseffekt ??? (pc.coding)

verfaßt von Mr. Teflon, 12.08.2009, 01:06:11

Hallo,

ich zeige Euch mal den Code vom Berechnungsteil für negative Temperaturen.
Ich begrenze die Ausgabe/Anzeige auf -99,9°C. Mit der Abfrage

if(wert2 > 9.99)
wert2 = 9.99;

Die Zahl wird nur noch in Einzelteile zerlegt, sodass eigentlich im Terminal -99.9 ankommen/angezeigt werden müßten.

ABER! Ich bekomme -99,8 angezeigt !!!

Wie kann denn plötzlich aus einer 9 eine 8 werden?

Spinne ich oder wer spinnt?  :???:

Gibts Erklärungen?



// ********** KTY10-6 Temperaturberechnung aus A/D und Ausgabe an COM ************ \\\\
// *** Berechnung mit den kalibrierten SensorDigits nur gültig mit Rv 5,6kOhm  *** \\\\
// ********** -30°C ... 0°C zweistellig und 0°C ... 150°C dreistellig ************ \\\\

   
void com_Temperatur (uchar chan)
   {
   SensorMin = 186;				// A/D Digitwert 186 = Temperatursensor -30°C
   SensorNull = 231;				// A/D Digitwert 231 = Temperatursensor   0°C
   Sensor100 = 386;				// A/D Digitwert 386 = Temperatursensor 100°C
   SensorMax = 443;				// A/D Digitwert 443 = Temperatursensor 150°C
   	                     
   wert2 = (float) ad_in(chan);			// A/D Wandler auslesen und als float wert2 übergeben
     
   if(wert2 < 231)				// wenn Temperatur negativ, dann hier rechnen
   {
   
   com_txd (\'-\');				// Zeichen \"-\" Ausgabe an COM
      				                // Bsp. wert2 = 201   
   wert2 = (wert2-SensorNull)/(Sensor100-SensorNull)* -10; // Temperaturberechnung, wert2 = 1,935
   
   if(wert2 > 9.99)				// wenn Temperatur kälter wie -99°C, dann 
      wert2 = 9.99;				// wird Anzeige auf -99,9°C gesetzt
	  
   D = wert2;								
   com_txd (D + 48);				// Zehner Stelle als Ganzzahl an COM
   
   wert2 = wert2 - D;						
   wert2 = wert2 * 10;						
   D = wert2;								
   com_txd (D + 48);				// Einer Stelle als Ganzzahl an COM
   
   com_txd (0x2e);				// Dezimalpunktausgabe an COM
	
   wert2 = wert2 - D;						
   wert2 = wert2 * 10;						
   D = wert2;								
   com_txd (D + 48);				// erste Kommastelle als Ganzzahl an COM
      
   // com_txd (176);				// Zeichen ° an COM
   com_txd (\'C\');
   
   com_print(\"\\n\\r\");               		// Zeilenende
   }
   

--
___________
Tschau
Mr. Teflon

 

gesamter Thread:

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz