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

Edit Feld: Wert anzeigen mit 4 Nachkommastellen

 

Isamin
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2011, 10:05     Titel: Edit Feld: Wert anzeigen mit 4 Nachkommastellen
  Antworten mit Zitat      
Hallo,

ich habe eine Frage zu Edit-Feldern.

In dem Edit-Feld wird ein Wert eingeben, der einer Variablen zugeordnet wird und dann wiederum auf 4 Nachkommastellen gerundet dem Edit-Feld zurück gegeben wird. Kann anstatt zu Runden, den Wert komplett zurück geben und dabei trotzdem nur 4 Nachkommastellen angezeigt werden. Wie beim Variable Editor. Angezeigt wird der Wert nur mit 4 Nachkommastellen und erst wenn man drauf klickt, wird der komplette Wert angezeigt.
(Dieser Code steht in der Callback Funktion des Edit-Feldes)
Code:
global WERT
input = str2double(strrep(get(hObject,'String'),',','.'));
if isnan(input)
    input=0;
else
    if input < 0
            input = 0;
    elseif input > 3
            input = 3;
    end
     
end
WER.amp(1,1)=input;
set(hObject,'String',num2str(0.0001*round(10000*input)));


Vielen Dank

MfG
Isamin
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 01.06.2011, 10:16     Titel:
  Antworten mit Zitat      
Olala, das ist aber schräg programmiert!

Du kannst das Problem viel besser folgendermaßen lösen:

(1) Der tatsächliche Variablenwert steht immer in der Eigenschaft 'Value' des edit-handles.

(2) Zur GUI-Darstellung des Wertes im edit-Feld wird in der Callback-Funktion der tatsächliche Wert der Variablen aus der 'Value'-Eigenschaft des handles gelesen, z.B. mit num2str(val,'%.4f') auf 4 Nachkommastellen gerundet und in die 'String'-Eigenschaft des edit-handles geschrieben. Den round-Befehl braucht man nicht!

(3) Natürlich kann man beim ersten Klick auch den gerundeten Wert anzeigen (siehe (2)) und beim zweiten Klick dann den genauen Wert. Dazu kopiert man den Wert aus der 'Value'-Eigenschaft ohne Rundung in die 'String'-Eigenschaft mit num2str(val).

Das Grundprinzip lautet also: Strikte Trennung von Inhalt und Darstellung!

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Isamin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2011, 10:39     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort.
Ich glaube dass ich es Verstanden habe. Ich versuche es mal umzusetzen und melde dann meine Ergebnisse.

Übrigens, ich bin Anfänger, daher der schräge Code. Aber ich bin schon ganz glücklich, dass es soweit funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Isamin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2011, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

ich weis jetzt nicht genau ob ich das falsch Verstanden habe.
Bei dem Edit-Feld handelt es sich um ein uicontrol mit der Eigenschaft 'style', 'Edit'.
Soweit ich das sehe, kann man den Text, der dort eingegeben wird nur als String auslesen, in eine Zahl umwandeln und dann einer Variablen zuordnen. Also in der Form
Code:
input = str2double(get(hObject,'String'));
bzw.
Code:
input = str2double(get(handles.NAME,'String'));

Die Eigenschaft 'Value' ist bei dem Edit-Feld nicht zu verwenden.

Also, das Beispiel num2Str(val,'%.4f') gibt dem Edit-Feld die Zahl als String wieder zurück.

Es geht mir hier darum das zwischen 2 fenstern hin und her gerechnet werden kann, wobei jedes fenster 16 Edit-Felder hat.
Z.B.(jeweils 2 Felder) y und z in einem und Phase und Amplitude in dem anderen.

Wenn ich jetzt für y und z einen Wert eingebe und einen Button für das zweite klicke, gibt er im zweiten Fenster den gerechneten Wert aus.
Das ganze geht dann auch wieder zurück, wobei das erste Fenster der Master ist.
Es war eigentlich geplant, dass wenn man in ein Edit-Feld etwas eingibt, alle Variablen nochmal aktualisiert werden,
sich also die Werte der Edit-Felder ziehen.
Hier ist aber das Problem, dass hier dann der gerundete Wert genommen wird und die Rechnung sich ändert. Wenn man den Wert aber nicht gerundet ins Edit-Feld zurück gibt, hat man dort oft eine unansehnliche Zahl stehen


Es scheint mir, dass die Rechnungen selbst nur über die Variablen laufen dürfen. Also, dass nur die Eingabe in ein Edit-Feld einer Variablen zugeordnet wird und ohne Eingabe keine Werte aktuallisiert werden dürfen.

Wenn jemand noch eine andere Idee hat...
Thanks
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 06.06.2011, 12:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die Eigenschaft 'Value' ist bei dem Edit-Feld nicht zu verwenden.


Das ist nicht korrekt, man kann die 'Value'-Eigenschaft verwenden. Dort speicherst Du den tatsächlichen Wert der Variablen mit

Code:
set(hEdit,'Value',Variable)


In der 'String'-Eigenschaft stellst Du immer nur einen nach Deinen Wünschen gerundeten Wert der tatsächlichen Variablen dar. Mit diesem Wert darf nicht weitergerechnet werden, sondern immer nur mit dem tatsächlichen Wert.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Isamin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2011, 09:17     Titel:
  Antworten mit Zitat      
Hallo Tompie,

es hat Klick gemacht. Vielen Dank für deine Hilfe. Das klappt sehr gut.

Ich kann dann denn Thread mal schliessen.
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 - 2025 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.