![]() |
zehnerpotenzen
ich hab mir eine physik unit geschrieben die eben auch in 10er potenzen umrechnen soll
ich hab mal die negativen 10er potenzen zeurst gemacht
Delphi-Quellcode:
nr stellt eben die genauigkeit ein und genau da ist mein problem
function TPhysic.Potenz10(z: real; nr : Integer): String;
var help, hs : String; i,e,s,stellen : Integer; b : boolean; begin { aufbau zB 0.000021 ergebnis : 2.1*10^-5 nr = genauigkeit} help := floatToStr(z); s := 3; if nr > Length(help)-1 then nr := nr - Length(help)-1; hs := ''; stellen := 0; b := false; if (help[1] = '0') and (help[2] = ',') then begin for i:= 3 to length(help)-1 do begin s := s + 1; if b = false then if help[i] <> '0' then begin b := true; hs := help[i] + ','; for e := s to length(help)-1 do hs := hs + help[e]; end else inc(stellen); delete(hs,2+nr,length(hs)-(2+nr)); result := hs + '*10^-' + IntToStr(Stellen+1) end; end else begin end; end; aufruf :
Delphi-Quellcode:
Edit1.Text := p.Potenz10(StrToFloat(Edit1.text),2);
lösungen von zwei eingaben : 0,05634 5,63*10^-2 <-- das stimmt 0,000345 3,4*10^-4 <-- das stimmt nicht jemand eine ahnung wos happert(ist unsauber geschrieben bitte verzeiht) grüße Nico |
Re: zehnerpotenzen
Servus!
Zeile 23
Delphi-Quellcode:
ist so nicht korrekt. Dadurch schneidest du das letzte Zeichen deiner Zahl sozusagen ab.
for e := s to length(help)-1 do
hs := hs + help[e]; Immer dran denken: Strings sind 1-basiert, nicht 0-basiert. ;) Mit
Delphi-Quellcode:
sollte es eigentlich funktionieren. (habs jetzt allerdings nicht getestet)
for e := s to length(help) do
hs := hs + help[e]; |
Re: zehnerpotenzen
vielen herzlichen dank - es klappt :)
grüße Nico |
Re: zehnerpotenzen
Kein Problem! Sowas kann passieren. Bin da grad auch nur durch Zufall drüber gestolpert :lol:
|
Re: zehnerpotenzen
Zitat:
ich würde etwas in diese Richtung vorschlagen:
Delphi-Quellcode:
Function EngineerFormat(Const F : Double;Const Digits : Byte) : String;
Var P : Integer; Begin If (Abs(F) > 0.0) Then P:=Trunc(Log10(F) + 500) - 500 Else P:=0; Result:=Format('%s*10^%d',[FloatToStrF(F / Power(10,P),ffFixed,15,Digits - 1),P]); end; |
Re: zehnerpotenzen
mit Verlaub : jetzt stehen mir aber die haare weg :mrgreen:
bitte erklär mir ich mags verstehen ;) danke aber vielmals scheint ja weniger aufwand zu sein aber wies funktioniet würd ich gerne wissen ;) |
Re: zehnerpotenzen
Wenn gilt 10^x=y, dann gilt x=log10(y).
Die Zahl x ist ja gesucht. Verstanden? |
Re: zehnerpotenzen
ja jetzt schon viel besser - danke :zwinker:
|
Re: zehnerpotenzen
Log ist die mathematische Umkehrfunktion zur Potenz...
Log10 (also zur Basis 10) ist die inverse Operation zur Potenz von 10 LogN( N^P ) = P Log10( 10^P ) = P 10^3 = 1000 Log10(1000) = 3 10^-4 = 0.0001 Log(0.0001) = -4 bei "Zerquetschen" sind die Zahlen etwas weniger schön: 10^1.5 = ~31.6 Log10(31.6) = ~1.5 => so lässt sich relativ bequem feststellen, um wie viele Dezimal-Stellen eine Zahl geschoben (mit 10 multipliziert/dividiert) werden muss, damit genau eine Stelle vor dem Komma stehen bleibt - dieses Verschieben wird mit dem Dividieren durch Power(10,P) (= 10^P) bewerkstelligt der "Murks" mit dem Trunc(x + 500) - 500 ist dazu da, dass IMMER abgerundet wird (aus -4.2 mach -5), Trunc "rundet" normalerweise gegen 0 (aus -4.2 wird -4) PS: ich hoffe, dies war einigermassen verständlich PPS: da ich jetzt sooo lange geschrieben habe, sende ich es trotz rotem Kasten ab :-) |
Re: zehnerpotenzen
danke vielmals ;)
prima ne stunde meines lebens wieder an ner völlig dummen lösung verbraten :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz