ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Vorsätze für Masseinheiten
BeitragVerfasst: 23 Aug 2010, 22:42 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Moin, moin!

Da ich in letzter Zeit immer mehr mit den Picofarads, Mikrohenries und Megahertzen rumrechne, ging es mir ziemlich auf den Geist Ergebnisse der Art 12.3e-7 in korrekter Form zu interpretieren =(1.23µ-Irgendwas).

Für die einfachste Idee - man nehme irgendein %f-artiges Format, welche die Werte in Engineering Notation ausgibt - fand ich nichts. Da ich aber zu faul zum langen Suchen war und sowieso lieber gleich die entsprechenden Vorsätze für Masseinheiten (siehe Vorsätze für Maßeinheiten) ausgegeben haben wollte, schrieb ich ein kleines Code-Stück, welches diese Aufgabe übernimmt.

Falls es jemand von Euch gebrauchen kann, einfach Copy/Paste, das richtige Encoding für das müühh eintragen und ohne jede Garantie von mir benutzen. Ändern werde ich nichts mehr dran, weil es mir so reicht, wie es ist.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# encoding = windows-1252
class Float
def to_ing(precision=3, einheit='')
wert = self.abs
sign = self<0 ? '-' : ''
(if wert < 1e-24 || wert >= 1e27
"%s%e" % [sign, wert.round(precision)]
else
("%#{5+precision}.#{precision}f" % (wert/10.0**((e=(Math.log10(wert)/3).floor)*3).
round(precision))) + (%w{y z a f p n �� m} + [''] + %w{k M G T P E Z Y})[e+8]
end + einheit).strip
end
end

if $0 == __FILE__
puts "350e-12 Farad=#{350e-12.to_ing(2,"F")}"
puts "1.645e3 Hertz=#{1.645e3.to_ing(2,"Hz")}"
puts "12e-6 Henry=#{12e-6.to_ing(2,"H")}"
puts "567324 Meter=#{567324.to_f.to_ing(2,"m")}"
puts "1500000 Hertz=#{1500000.to_f.to_ing(2,"Hz")}"
puts "12.3e-7=#{12.3e-7.to_ing}"
end
...ergibt im Testlauf...

1
2
3
4
5
6
350e-12 Farad=350.00pF
1.645e3 Hertz=1.65kHz
12e-6 Henry=12.00��H
567324 Meter=567.32km
1500000 Hertz=1.50MHz
12.3e-7=1.230��


die zs in cs geändert, so wie es sein sollte.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorsätze für Masseinheiten
BeitragVerfasst: 24 Aug 2010, 02:49 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
hm...sieht mir ziemlich nützlich aus. :)
WoNáDo hat geschrieben:


1
2
3
4
5
6
7
8
9
10
11
12
13
# encoding = windows-1252
class Float
def to_ing(prezision=3, einheit='')
wert = self.abs
sign = self<0 ? '-' : ''
(if wert < 1e-24 || wert >= 1e27
"%s%e" % [sign, wert.round(precision)]
else
("%#{5+prezision}.#{prezision}f" % (wert/10.0**((e=(Math.log10(wert)/3).floor)*3).
round(prezision))) + (%w{y z a f p n �� m} + [''] + %w{k M G T P E Z Y})[e+8]
end + einheit).strip
end
end

Da steht einmal "precision" (mit c) und ansonsten "prezision" (was weder wirklich deutsch noch englisch ist). Änder das doch nochmal eben hier, damit's "Copy'n'Paste" für andere auch funktioniert.

_________________
-


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Vorsätze für Masseinheiten
BeitragVerfasst: 24 Aug 2010, 05:56 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
BadBoy_ hat geschrieben:
Da steht einmal "precision" (mit c) und ansonsten "prezision" (was weder wirklich deutsch noch englisch ist). Änder das doch nochmal eben hier, damit's "Copy'n'Paste" für andere auch funktioniert.

Hab ich im ersten Post getan - weiss überhaupt nicht, warum ich die cs in zs geändert hatte, weil bei mir ursprünglich auch cs standen.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: