Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Direct Modeling
  Lisp

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Lisp (1119 mal gelesen)
rene.weimar
Mitglied
CAD engineer


Sehen Sie sich das Profil von rene.weimar an!   Senden Sie eine Private Message an rene.weimar  Schreiben Sie einen Gästebucheintrag für rene.weimar

Beiträge: 24
Registriert: 27.11.2002

erstellt am: 16. Mai. 2003 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Dorothea an!   Senden Sie eine Private Message an Dorothea  Schreiben Sie einen Gästebucheintrag für Dorothea

Beiträge: 242
Registriert: 22.11.2001

erstellt am: 16. Mai. 2003 12:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rene.weimar 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von Walter Geppert an!   Senden Sie eine Private Message an Walter Geppert  Schreiben Sie einen Gästebucheintrag für Walter Geppert

Beiträge: 2070
Registriert: 12.12.2000

Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.0, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf
HP ZBook 17 G4, Windows 10 Pro 64

erstellt am: 16. Mai. 2003 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rene.weimar 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von rene.weimar an!   Senden Sie eine Private Message an rene.weimar  Schreiben Sie einen Gästebucheintrag für rene.weimar

Beiträge: 24
Registriert: 27.11.2002

erstellt am: 16. Mai. 2003 13:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Dorothea an!   Senden Sie eine Private Message an Dorothea  Schreiben Sie einen Gästebucheintrag für Dorothea

Beiträge: 242
Registriert: 22.11.2001

erstellt am: 16. Mai. 2003 13:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für rene.weimar 10 Unities + Antwort hilfreich

Hi Rene,

You get the floating number if you divide by a floating number.
For instance:
(/ 100 3)    => 100/3
(/ 100 3.0)  => 33.33333333


Is this what you wanted to know?
Dorothea

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz