| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: String in Zahlen umwandeln (3723 mal gelesen)
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 28. Jul. 2005 13:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, Wer kann mir sagen wie ich eine String in Zahlen umwandeln kann und 4 Nachkommastellen (oder mehr) habe? (setq KL-liste (list (rtos KL-Akt-Station 2 4) (rtos KL-Richtung-neu 2 4))) Liefert mir eine Liste mit Strings und 4 Nachkommastellen. Wenn ich jetzt auf die Liste zugreife mit (list (atof(nth 1 KL-Liste)))
habe ich nur noch 2 nachkommastellen. Der Wert wurde auf zwei Stellen nach den Komma gerundet. DIMZIN steht auf 0. Danke Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 28. Jul. 2005 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 28. Jul. 2005 14:10 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 28. Jul. 2005 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Zitat: Original erstellt von MH Bit: Liefert mir eine Liste mit Strings und 4 Nachkommastellen.
Hast du das überprüft? (rtos 1.23 2 4) => "1.23" ; nicht "1.2300"!!! Aber wenn die Ausgangszahl wirklich 2031.1584 war, sollte da wohl "2031.1584" drinstehen. Der einfachste Test wäre nun, mal alle anderen Effekte auszuschließen: Was kommt denn am Bildschirm raus, wenn du nur (atof"2031.1584") auf der K-Zeile eingibst? Auch mal mit einer oder 9 Kommastellen ausprobieren. Wenn da max. 2 Stellen angezeigt werden, ist es ein Anzeigeproblem. Da du keine Versionsangaben machst, könnte z.B. LUPREC involviert sein. Falls die Stellen stimmen, hast du ein Problem mit deiner Programmlogik i.w.S.! Gruß, Axel
------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Jul. 2005 15:03 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
vielleicht hilft das weiter bei der Fehlersuche Befehl: (atof "1.123456789") -> 1.12346 Befehl: (atof "10.123456789") -> 10.1235 Befehl: (atof "100.123456789") -> 100.123 Befehl: (atof "1000.123456789") -> 1000.12 Befehl: (atof "10000.123456789") -> 10000.1 Befehl: (atof "100000.123456789") -> 100000.0 ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Jul. 2005 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 28. Jul. 2005 17:25 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von mapcar: Hast du das überprüft? (rtos 1.23 2 [b]4) => "1.23" ; nicht "1.2300"!!! [/B]
(rtos 1.23 2 4) => "1.2300" Das Problem ist nicht rtos sondern atof
(setq tmp (rtos 2031.1584 2 4)) => "2031.1584" Das ist OK das will ich. aber: (setq tmp2 (atof tmp)) => 2031.16 das will ich nicht, ich will 2031.1584 wenn das ganze nur ein Anzeigenproblem ist, dann muss (- tmp2 0.004) 2031.15 sein, ist es auch ?!?! Ich weiß ja nicht was nu passiert ist, aber jetzt klappt es ! (setq atmp (rtos 2031.1584 2 4)) => "2031.15842" (setq atmp (atof atmp )) => 2031.16 (setq atmp (rtos atmp 2 4)) => "2031.15842" hier kam immer "2031.16" raus! Ich hasse es wenn auf einmal was klappt und ich weiß nicht warum! Vielen Dank für eure Hilfe. Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 28. Jul. 2005 17:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab doch noch eine Frage denn: jetzt kommt bei (rtos 1000 2 4) => "1000.0000" da kam sonst immer "1000" raus. Wie kann ich die Anzahl der Stellen nach dem Komma einstellen? Hat das was mit DIMZIN zu tun? Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 28. Jul. 2005 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 28. Jul. 2005 17:44 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 29. Jul. 2005 17:49 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
cad-intensiv Mitglied CAD-Anbieter
Beiträge: 31 Registriert: 14.06.2005
|
erstellt am: 29. Jul. 2005 20:34 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Zitat: Original erstellt von MH Bit: Hallo,ich hab doch noch eine Frage denn: jetzt kommt bei (rtos 1000 2 4) => "1000.0000" da kam sonst immer "1000" raus. Wie kann ich die Anzahl der Stellen nach dem Komma einstellen? Hat das was mit DIMZIN zu tun? Michael
Ja, das hat was mit DIMZIN zu tun - das stand bei Dir früher vermutlich auf 8. Ich verwende statt RTOS immer meine eigene Funktion, die Du gerne für Dich passend ändern kannst:
Code:
(defun my-rtos (zahl modus stellen / result olddimzin) (setq olddimzin (getvar "DIMZIN")) (setvar "DIMZIN" 8) (setq result (rtos zahl modus stellen)) (setvar "DIMZIN" olddimzin) (if (and (= 'INT (type (read result))) (/= 0 stellen) ) (setq result (strcat result ".0")) ) result )
Robert ------------------ Lisp-Seminare in Wien am 25. und 26. Sep 2005 und später in München, Frankfurt, Köln , Berlin ... -> Infos unter cad-intensiv@gmx.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 04. Aug. 2005 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo, erst mal Danke für eure Hilfe. ich hab ein wenig rumprobiert, mußte aber feststellen, dass das ganze immer noch zu ungenau ist. Mit der Funkion _dist bekomme ich wenn ich zwei Punkte angebe den Winkel. Allerdings weiß ich nicht wie ich das Ergebnis dieser Funktion weiterverarbeiten kann. (command "_dist" (list (distof(nth 2 nach-Liste)) (distof(nth 3 nach-Liste)) (distof(nth 4 nach-Liste))) (list (distof(nth 2 von-Liste)) (distof(nth 3 von-Liste)) (distof(nth 4 von-Liste)))) liefert mir die Liste in der Eingabekonsohle, doch wie kann ich das Ergebnis abfangen? (setq testwinkel (command "_dist" (list (distof(nth 2 nach-Liste)) (distof(nth 3 nach-Liste)) (distof(nth 4 nach-Liste))) (list (distof(nth 2 von-Liste)) (distof(nth 3 von-Liste)) (distof(nth 4 von-Liste))))) funktioniert nicht. Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 04. Aug. 2005 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Hi Michael, wie wärs wenn du mit getangle bzw getorient arbeitest ? Beide Funktionen sind direkt für Winkelabfragen gedacht und liefern dir das Ergebnis in Bogenmaß (getangle in Abhängigkeit von ANGBASE und ANGDIR; getorient nicht); der erste Winkel weniger dem zweiten Winkel ergibt die Differenz; wichtig ist jedoch (wie immer wenn man mit Winkeln arbeitet) die Beachtung der Quadranten in denen sie (zu) liegen (kommen). Diese Ergebnisse kannst du natürlich auch direkt von einander abziehen (oder auch addieren; alles >2pi ist mehr als 360°). Das was bei dir glaub ich noch nicht ganz klar ist, ist die Abfrage der Winkel; an und für sich reichen für einen Winkel 3 Punkte (einer davon ist gemeinsam) - vier Punkte braucht man ja nur dann wenn man den Winkel zwischen zwei sich nicht schneidenden Linien erhalten will... Vielleicht kannst du mal eine kurze Skizze/Zeichnung/Erklärung posten, was du genau vor hast (dies bedeutet aber nicht, dass ich es auch lösen kann - bin schliesslich "nicht-Lispler" ) ------------------ Grüsse Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad-intensiv Mitglied CAD-Anbieter
Beiträge: 31 Registriert: 14.06.2005
|
erstellt am: 04. Aug. 2005 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Zitat: Original erstellt von MH Bit: Hallo, erst mal Danke für eure Hilfe.ich hab ein wenig rumprobiert, mußte aber feststellen, dass das ganze immer noch zu ungenau ist. Mit der Funkion _dist bekomme ich wenn ich zwei Punkte angebe den Winkel. Allerdings weiß ich nicht wie ich das Ergebnis dieser Funktion weiterverarbeiten kann. (command "_dist" (list (distof(nth 2 nach-Liste)) (distof(nth 3 nach-Liste)) (distof(nth 4 nach-Liste))) (list (distof(nth 2 von-Liste)) (distof(nth 3 von-Liste)) (distof(nth 4 von-Liste)))) liefert mir die Liste in der Eingabekonsohle, doch wie kann ich das Ergebnis abfangen? (setq testwinkel (command "_dist" (list (distof(nth 2 nach-Liste)) (distof(nth 3 nach-Liste)) (distof(nth 4 nach-Liste))) (list (distof(nth 2 von-Liste)) (distof(nth 3 von-Liste)) (distof(nth 4 von-Liste))))) funktioniert nicht. Gruß Michael
Vielleicht solltest Du Dich erst mal mit einigen Grundlagen von LISP befassen - ich empfehle das Durcharbeiten des Tutorials von mapcar oder natürlich den Besuch eines Seminars (siehe meine Sig).
Lisp lebt davon, dass die aufrufenden Funktionen vorhersagbare Ergebnisse zurück liefern. (command <...> ) liefert immer NIL zurück. Wenn Du in LISP mit Werten arbeiten willst, die in AutoCAD Objekten stecken oder daraus abgeleitet werden, dann musst Du die dafür vorgesehenen AutoLISP-Funktionen verwenden. Wenn es keine passende Funktion gibt, dann musst Du Dir selbst eine schreiben, die aus den allgemein zugänglichen Objektdaten die von Dir gewünschten Werte errechnet. Gruß Robert ------------------ Lisp-Seminare in Wien am 25. und 26. Sep 2005 und später in München, Frankfurt, Köln , Berlin ... -> Infos unter cad-intensiv@gmx.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 04. Aug. 2005 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 04. Aug. 2005 14:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas Ich habe eine Skizze begefügt mit dem was ich vor habe. Ich glaube ich habe das Problem gelößt, zumindest wenn die Gerade in der X-Y Ebene liegt. Vieleicht gebt es ja noch eine schönere Lösung. Ich wollte die Winkel erst berechnen, das ging aber nicht wegen irgndwelchen Rundungsfehler im System. Also probiere ich es jetzt mit angle. gruß Michel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 04. Aug. 2005 15:04 <-- editieren / zitieren --> Unities abgeben:
|