| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Nachkommastellen (184 / mal gelesen)
|
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 11. Feb. 2025 14:01 <-- editieren / zitieren --> Unities abgeben:         
Moin! Ich möchte in Abhängigkeit von der Größe des Zahlenwertes null bis drei Nachkommastellen anzeigen lassen. Mein erster naiver Versuch (s. u.) taugt nichts, weil negative Werte entstehen können, die nicht akzeptiert werden. sAB = Round(oCD.MassProperties.Area, Log(1 / oCD.MassProperties.Area)) sVB = Round(oCD.MassProperties.Volume , Log(1 / oCD.MassProperties.Volume)) Mag mir vielleicht jemand kurz zeigen, wie es richtig geht? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 727 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 12. Feb. 2025 09:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
wie wäre das? Code: Sub test() Dim A As Double A = 999 'eine Fläche zum Ausprobieren A = A + 0.123456 'irgendwelche Nachkommastellen anhängen Dim sAB As Double, AnzStellen As Long Select Case A Case 0 To 5 AnzStellen = 3 Case 5 To 100 AnzStellen = 2 Case 100 To 1000 AnzStellen = 1 Case Else AnzStellen = 0 End Select 'das eigentliche Runden sAB = Round(A, AnzStellen) MsgBox A & vbCrLf & sAB, , "Stellen: " & AnzStellen End Sub
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 12. Feb. 2025 11:54 <-- editieren / zitieren --> Unities abgeben:         
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2743 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 12. Feb. 2025 12:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Moin Weniger Zeilen machen es nicht per se besser. Oder liest sich das einfacher?
Code:
Dim i As Integer: i = 1: If Len(Left(CStr(oCD.MassProperties.Area), InStr(CStr(oCD.MassProperties.Area), ",") - 1)) = 1 Then i = 3: If Len(Left(CStr(oCD.MassProperties.Area), InStr(CStr(oCD.MassProperties.Area), ",") - 1)) = 2 Then i = 2
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 12. Feb. 2025 12:51 <-- editieren / zitieren --> Unities abgeben:         
Nein Vielleicht ist es nur eine Spielerei und ich bin nicht pragmatisch genug, aber ich kann nicht glauben, dass eine so einfache Regel nicht auch einfach formuliert werden kann. Der Logarithmus hat eigentlich schon genau das gewünschte Verhalten, ich müsste nur das Ergebnis eingrenzen. In der Inventor-Parametertabelle gibt es dafür die Funktionen Min und Max; gibt es in VBA nichts Entsprechendes? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2743 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 12. Feb. 2025 13:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Moin Benötigt wäre eine Treppenfunktion, da das Ergebnis über einen Wertebereich hinweg konstant bleibt und sich nur bei definierten Grenzwerten sprunghaft ändert. Die Select-Case Anweisung oder auch ein If-Then ist die programmatische Umsetzung. Hinter einer Min,Max Funktion steckt auch nur ein mehrzeiliger Programmcode mit einem Vergleich. Es erspart dem Anwender Tipparbeit, wenn sich wiederholende Programmteile in Funktionen gekapselt werden. Manchmal mit skurilen Entwicklungen. Mein persönlicher Favorit: Code:
Private Function Invert(ByVal Zahl as Double) As Double Invert = Zahl * (-1) End Function
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 12. Feb. 2025 13:37 <-- editieren / zitieren --> Unities abgeben:         
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2743 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 13. Feb. 2025 15:23 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Moin Nein, das stimmt so nicht. Die Funktion Round erwartet als zweites Argument eine Integer Wert für die Anzahl der Nachkommastellen. Die Logfunktion liefert aber einen Double Wert als Ergebnis. VBA konvertiert diesen für die Ausführung der Roundfunktion automatisch in einen Integer. Das sollte vermieden werden, da es zu unerwartetem Programmverhalten führen kann. Die Roundfunktion rundet dann die Fläche bzw. das Volumen auf die Anzahl Nachkommastellen die von Log (genauer gesagt von der automatischen Double zu Integer Konvertierung) zurückgegeben werden. Bei einem negativen Wert weiß ich ehrlich gesagt auch nicht aus dem Kopf was passiert. Die Funktion liefert aber keine sprunghaften Wertänderungen. Ich sehe keine Möglichkeit daraus eine Abstufung mit 0, 1, 2 und 3 zu machen. Möglicherweise gibt es eine Funktion die annähernd die Werte liefert. Die müßte mM zu Beginn einen steileren Anstieg als der natürliche Logarithmus haben und dann gegen 3 oder die Eulerzahl als Grenzwert laufen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 13. Feb. 2025 16:02 <-- editieren / zitieren --> Unities abgeben:         
Ah, Danke für die Erklärung! Aber ein Round() oder ein Int() einzufügen, wäre doch kein Problem. Was bei negativen Werten passiert, kann ich Dir sagen, denn das habe ich ja beim Herumprobieren erzeugt: Die Ausführung stoppt mit Fehlermeldung. Aber die Sache lässt mich nicht los. Ich sehe es als mathematische Übung. Sudokus sind langweilig. Ich experimentiere deshalb grad mit Arcus-Tangens, die Funktion hat einen Definitionsbereich von +/- Unendlich während der Wertebereich streng begrenzt ist auf +/- Pi/2. Vermutlich erzeugt das Lösen einer Winkelfunktion und eines Logarithmus' im Hintergrund weit mehr Rechnerlast als eine schlichte Abfrage, aber ich will einfach wissen, ob es geht . ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! [Diese Nachricht wurde von Roland Schröder am 13. Feb. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2743 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 13. Feb. 2025 16:21 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Moin Aha, wie so ein Pitbull mit Kiefersperre. Einmal reingebissen, Kiefer ausgerenkt, Loslassen unmöglich. Ob eine Lösung effizient ist, kann man ja erst beurteilen wenn man sie gefunden hat. Ich hatte in die Richtung überlegt, statt dem Zahlenwert von X die Anzahl der Dezimalstellen vor dem Komma zu nehmen. Das würde den Wertebereich auf ganze positive Zahlen von 1 bis vielleicht 10 einschränken. In meinem jugendlichen Leichtsinn kam mir dann die Idee es mal wie etwas wie Y = 1/X^4 + 1/X^3 + 1/X^2 zu probieren. Das ergäbe für x=1 y=3, also für 1-stellige Werte, drei Nachkommastellen. Die Funktion fällt dann mit stetig geringer werdender Neigung gegen 0 ab. Aber egal wie man es dreht, entweder ist am Anfang das Gefälle zu stark oder hinten raus zu gering. Das bringt keine Lösung. Dann kam mir die Idee aufgrund des beschränkten Wertebereiches es vielleicht mal im endlichen Zahlenkörper eines Galois Feld zu versuchen. Und blitzartig wurde mir wieder klar, warum ich das im Studium so gehasst habe.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 13. Feb. 2025 17:55 <-- editieren / zitieren --> Unities abgeben:         
So, Code: sVB = Round(dVB, Round(Atn(Log(70.71 / dVB))) / 1.57 + 1)
funktioniert tatsächlich. Ich bekomme so schon mal je nach Ausgangswert 0, 1 oder 2 Nachkommastellen. Immerhin. 70.71 ist die logarithmische Mitte zwischen 10 und 100, wo es jeweils von 2 auf 1 bzw. von 1 auf 0 Nachkommastellen umschlagen soll. Der Logarithmus ist dort dann 0, und die Steigung des Atn maximal. Die Umschlagpunkte passen jetzt allerdings noch nicht genau, da muss ich noch einen Faktor einfügen. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 727 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 13. Feb. 2025 18:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Jetzt ist es also eine kleine challenge Als Sprungfunktion wäre mir sgn(Zahl) bekannt. Das gibt abhängig vom Vorzeichen -1 / 0 / +1 zurück. Wenn man das zu 1 addiert und dann halbiert, hat man einen Sprung von 0 auf 1. Dass dabei auch noch 0,5 raus kommen kann wenn Zahl=0 ignoriere ich im folgenden. "Zahl" kann man schieben, so dass der Sprung am gewünschten Ort liegt: x-a (x: unsere Variable zb. Fläche a: Grenzwert wo der Sprung sein soll) Wenn man das nun 3x macht mit unterschiedlichen a und diese sgn summiert, hat man eine aufsteigende Treppe von 0 bis 3. Das muss dann nur noch umgekehrt werden, weil wir ja eine absteigenden Treppe haben wollen. (kleine Zahlen 3 Stellen, große Zahlen 0 Stellen) Also : 3 - (1+sgn(x-A1))/2 - (1+sgn(x-A2))/2 - (1+sgn(x-A3))/2 Ich hab das nicht ausprobiert. Kann sein, dass Tipp und Denkfehler dabei sind. Wenn mir sowas unter die Augen kommt, ohne dass ich das innerhalb der letzten Tage selbst gemacht hab, braucht es schon eine Weile, um das wieder zu verstehen. Oder eben einige Zeilen Kommentar zur Erklärung, was dann aber die vorher gesparten Zeilen wieder egalisiert. Deshalb bin ich bei Ralf: das ganze in eine function packen und diese verwenden. ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13502 Registriert: 02.04.2004 Inventor
|
erstellt am: 14. Feb. 2025 20:28 <-- editieren / zitieren --> Unities abgeben:         
Moin! Ja, sign() ist auch gut, hat aber nur drei mögliche Ergebnisse. Ich habe inzwischen meine Atn-Formel fertig getunt, und nun liefert sie auch alle vier Möglichkeiten von 0 bis 3. Der "Fixpunkt" liegt dann bei 10, und die beiden anderen Umschlagpunkte, 1 und 100, im logarithmischen Sinne symmetrisch dazu, das klappt ziemlich gut: Code: sAB = Round(dAB, Round(Atn(1.8 * Log(9.999 / dAB))) / 1.0472 + 1.5)
Interessant ist, dass die Inventor-Gleichungskurve bei der Darstellung der aus Log und Atn kombinierten Funktion versagt. Deshalb habe ich Excel zu Hilfe genommen und damit den nötigen Faktor durch Ausprobieren bestimmt. Die Umschlagpunkte exakt zu treffen, ist ein bisschen schwierig, aber auch nicht ganz so wichtig. Es spricht im Übrigen nichts dagegen, das Ganze in eine function zu packen. Dass es dort dann egal ist, ob es eine Zeile braucht oder zehn, sehe ich auch ein. Aber es macht doch großen Spaß, auch noch mal die gute alte Trigonometrie anzuwenden. Und eine oder mehrere Kommentarzeilen ist mir das auch das wert! ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |