| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
| Webcast: PTC | Smart Services, ein Webinar am 13.12.2024
|
Autor
|
Thema: Lisp (1705 mal gelesen)
|
rene.weimar Mitglied CAD engineer
Beiträge: 24 Registriert: 27.11.2002
|
erstellt am: 16. Mai. 2003 11:39 <-- editieren / zitieren --> Unities abgeben:
Can anyone tell me how to convert a string ("123.456") to a number (123.456). Can anyone tell me how I can round a number (0.0078499999999999) to a number (0.00785) or a string ("0.00785") Hope anyone can help me. René Weimar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorothea Mitglied
Beiträge: 242 Registriert: 22.11.2001
|
erstellt am: 16. Mai. 2003 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für rene.weimar
Hi Rene, Zitat:
Can anyone tell me how to convert a string ("123.456") to a number (123.456).
You can for instance use the command (read-from-string <string)>. Zitat:
Can anyone tell me how I can round a number (0.0078499999999999) to a number (0.00785) or a string ("0.00785")
I'm not sure if there exists one function call in lisp to do the rounding like described in your example. What I do in such a case is the following: * multiply by 10 as often as you want to have digits after the comma * call 'round' * divide by 10 as often as you multiplied => in your example: (/ (round (* 100000 0.0078499999999999)) 100000.0) Divide by any real number and you get a real number as result. For more information please have a look into a lisp book.
Hope this helps, Dorothea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 16. Mai. 2003 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für rene.weimar
First question: (setf number (read-from-string string)) Second: (setf string (format nil "~6,5,,,'0F" longnumber)) where the first parameter defines the overall length, the second the number of digits after the decimal point or a more mathematical solution: (defun dc4-round (wert genau) (let (dig w1 w2 rest rund) (if (/= wert 0) (progn (setf dig (truncate (log (abs wert) 10))) (setf w1 (* wert (expt 10 (- genau dig 1)))) (setf w2 (truncate w1)) (setf rest (- w1 w2)) (if (>= rest 0.5) (setf w2 (+ w2 1)) nil );;if (setf rund (/ w2 (expt 10 (- genau dig 1)))) );;progn (setf rund 0) );;if (values rund) ;; returnwert );;let ) where wert is the input number and genau is the absolute number for the rounding process, so 0.0000569999 will become 0.00057 and 569999 will become 570000 My answer took some time so Dorothea was faster ------------------ DC4 Technisches Büro GmbH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rene.weimar Mitglied CAD engineer
Beiträge: 24 Registriert: 27.11.2002
|
erstellt am: 16. Mai. 2003 13:24 <-- editieren / zitieren --> Unities abgeben:
Hello, all these solutions I have allready found. I need to write the result to a text field in a dialog shell. (display (common::dc4-round 0.0000569999 6)) with me doesn't result in 0.000057, but in 57/1000000, thus the text field contains "57/1000000"........ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorothea Mitglied
Beiträge: 242 Registriert: 22.11.2001
|
erstellt am: 16. Mai. 2003 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für rene.weimar
|