• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Rundung zur zweiten Dezimalstelle

  • Ersteller Ersteller Angelo2449
  • Erstellt am Erstellt am

Angelo2449

Guest
Hallo alle,
mit Rundungsnummern zur zweiten Dezimalzahl genommen werden, um eine Tabelle zu komponieren.
Ich kann die Abdenden wegen der Rundungen nicht mit ihrer Summe zusammenfallen lassen, cji hat eine schöne Routine?
Danke.
 
wenn das Problem ist zu überprüfen, ob zwei Zahlen (fast) gleich sind: dh, wenn sie nur für die ersten Dezimals sind, können Sie sie mit (equal espr1 espr2 Approximation) vergleichen.
Espr1 = 1.123456 espr2=1.123457
(equal espr2) gibt nil
(equal espr1 espr2 0.000001) gibt t zurück.
Wenn Ihre Absicht ist, eine Rundung zu machen, müssen Sie 0,005 zusammenfassen und vergleichen Sie sie mit der n nicht hinzugefügt (nur 2 Ziffern nach dem Komma). wenn die beiden Zahlen gleich sind, bedeutet, dass die Summe von 0,005 keinen Übertrag hat und damit bedeutet, dass die Zahl eine Zahl von weniger als 5 bis zum 2stelligen Dezim hatte. (z.B. 0,023 + 0,005 = 0,028 (die 2 wurden nicht 3).
Ich hoffe, ich habe es erklärt.
 
danke x11start, nach Ihren Ratschlägen, Ich schrieb diesen Code, der eine echte Zahl in eine formatierte String mit zwei Dezimals auf 5 gerundet.
fügt auch fehlende Nullen hinzu, es funktioniert super!
Vielleicht ist es nicht das Beste von Stil, aber, wie sie sagen, das Siegerteam ändert sich nicht.
Es wäre jedoch interessant, den Code sogar stilistische Verbesserungen zu machen.
Danke.
Code:
 (defun formatiert (/numberx ganze fraz ganze frazs erste zweite dritte dritte zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite zweite Sekunde)

(setq numerox areax)

(Setq Ganzes (fix numberx))
(setq fraz)

(setqinteras)
(Sectq frazs)
(Setq frazs (Substr frazs 3 3))

(Sectq first (substr frazs 1 1))
(Sectq second (Substr frazs 2 1))
(Abschnitt 3 (1))

(Abschnitt III)

(falls)
(setq secondn (1+))
(setq secondn (atoi second)
;

(setq Sekunden)
(Setq Sekunden (Substr Sekunden 1 1))

(setq numeros (strcatinteros "." erste Sekunden)

(setq areay numeros)

;
 
zu runden (in der ersten Ziffer nach dem Komma und nicht in der zweiten..., aber wenig ändern) Ich benutze:

;
---------------------------------------------------------------------------------------------------------------
; Rundung
---------------------------------------------------------------------------------------------------------------
;
; Eingang :
; zu rundende Zahl (z.B. 4.35)
;
; Ausgang:
; abgerundete Narrozahl (z.B. 4,5)
;
;
; die Rundung erfolgt nach folgenden Kriterien:
;
; von 0,00 bis 0,24 -> 0,03
0,25 bis 0,74 -> 0,5 mg/kg
von 0,75 bis 1,0 -> 1,0
;
;
(defun rund (Anzahl / gesamte geröstete Komma)
Gesamtzahl
(setq comma (- ganze Zahl)); Teil nach Komma
(cond)
( < comma 0.25)(setq arrot 0.0)); falls < 0,25 bis 0,0 (pro Defekt)
(und (>= comma 0.25)(< comma 0.75))(setq arrot 0.5)); auf 0,5 (halb) gerollt
(t (setq arrot 1.0)
)
(setq narro (+ ganze arrot)); nummer (vollständig + abgerundeter Teil)
)
;
 
Ich nutze diese 2 Funktionen, um Dezimals zu verwalten

; Funktion, eine Zahl mit Delta-Basis zu runden
(defun rund (n delta)
(* Delta (Fix (+) 0.49))
)

; Funktion des Schneidens von Dezimals
(defun fixnum(num dec / viele)
(setq viele (expt 10.0 dec))
(/ (Fix)
)

(um 1.45689 0.01) gibt 1.46
(um 1.45423 0.01) gibt 1.45 zurück
(fixnum 1.45689) gibt 1.4
(fixnum 1.45689) gibt 1.45
(fixnum 1.45689 3) gibt 1.456
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben