WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rückgabewert einer Berechnung immer als ganze Zahl

 

FelixF
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 22.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2013, 12:02     Titel: Rückgabewert einer Berechnung immer als ganze Zahl
  Antworten mit Zitat      
Hallo alle zusammen,
ich habe mal wieder ein Problem. In meinem GUI lass ich einen Wert berechnen, den ich anschließend extern weiter verarbeite.
Jetzt zu meinem Problem: Ich benötige den berechneten Wert immer als ganze Zahl und nicht in expontieller Schreibweise. Das Kuriose an der Sache ist, dass Matlab mit den Wert mal so und mal so zurückgibt.

Beispiel:

12345 korrekt

1,2345e+005 falsch (o.ä)

Hat jemand eine Idee, wie ich das Problem lösen kann?

Grüße Felix
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.09.2013, 12:09     Titel:
  Antworten mit Zitat      
wie die zahl gespeichert wird und wie sie dir im command window oder so angezeigt wird sind 2 paar schuhe. die beiden von dir geposteten zahlen sollten sich bei berechnungen gleich verhalten. warum kannst du damit nicht weiter arbeiten?
ausgabe im commandwindow läst sich mittels
Code:
anpassen
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.09.2013, 12:11     Titel:
  Antworten mit Zitat      
Hallo

mache einfach ROUND
Private Nachricht senden Benutzer-Profile anzeigen
 
Baumann
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 25.09.08
Wohnort: Braunschweig
Version: 7.12.0.635 (2011a)
     Beitrag Verfasst am: 25.09.2013, 12:12     Titel:
  Antworten mit Zitat      
Hallo,

wenn es Dir nur um die Anzeige in Deinem GUI geht, dann würde ich den Wert für die Anzeige einfach mit num2str() in einen String umwandeln. Bei der externen Weiterverarbeitung musst Du dann natürlich den Datentyp beachten. Wie wird der Wert denn für die Weiterverarbeitung ausgelesen/übergeben?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.09.2013, 12:13     Titel: Re: Rückgabewert einer Berechnung immer als ganze Zahl
  Antworten mit Zitat      
Hallo FelixF,

12345 und 1.2345e5 ist aber doch genau die gleiche Zahl. Nur die Darstellung im Command Window ist unterschiedlich. Aber die kann man mit dem FORMAT Befehl nach Belieben anpassen. Siehe "help format".

Eine Berechnung, die als Inputs Integer Werte hat, kann wegen der Rundungsfehler nicht-integer Werte als Output haben. Wenn es also wirklich auf die Ganzzahligkeit ankommt, verwende ROUND().

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
FelixF
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 22.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2013, 12:33     Titel:
  Antworten mit Zitat      
Das es die gleiche Zahl ist weiß ich. Da ich diese Zahl aber an einem Kontroller schicken muss, der keine exponentielle Schreibweise versteht, muss die Zahl als ganze Zahl übergeben werden.

Mit round lass ich die Zahl bereits runden, somit bekomme ich keine Kommastellen. Allerdings hilft das nicht gegen die exp. Schreibweise.

Übergeben tue ich den Wert letztendlich mit

Code:

fprintf(com,'%d',meinVariable);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.09.2013, 12:45     Titel:
  Antworten mit Zitat      
Hallo


kommisch wenn du round vorher gemacht hast,
dann muss FPRINTF das richtig darstellen,

mache das noch mal explizit:

Code:
fprintf(com,'%d', round(meinVariable));
Private Nachricht senden Benutzer-Profile anzeigen
 
Baumann
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 25.09.08
Wohnort: Braunschweig
Version: 7.12.0.635 (2011a)
     Beitrag Verfasst am: 25.09.2013, 13:02     Titel:
  Antworten mit Zitat      
Hi,

ich bin mir nicht sicher ob man die exponentielle Schreibweise so wegbekommt. Matlab ist da echt hartnäckig. Wenn es bis jetzt noch nicht geklappt hat, dann versuch doch mal das:


fprintf(com,'%s', num2str(round(meinVariable),'%d'));
Private Nachricht senden Benutzer-Profile anzeigen
 
FelixF
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 22.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2013, 13:23     Titel:
  Antworten mit Zitat      
Ich habe jetzt eine Variante gefunden, sodass es funktioniert, allerdings weiß ich nicht warum.

Code:

fprintf(com, ['@0M %d,%d, %.0f,%d, %d,%d, 0,5000' term],...
                        [posXAbs,refSpeedMeasuring, round(i),refSpeedMeasuring, posZAbs,refSpeedMeasuring]);
 


i ist meine Variable, um die es sich handelt.

Wenn ich es mittels String probiere, bekomme ich die Meldung, dass nicht genug Eingaben übermittelt werden

Code:

fprintf(com, ['@0M %d,%d, %s,%d, %d,%d, 0,5000' term],...
                        [posXAbs,refSpeedMeasuring, num2str(round(i),'%d'),refSpeedMeasuring, posZAbs,refSpeedMeasuring]);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.