AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zehnerpotenzen

Ein Thema von Nicodius · begonnen am 2. Apr 2006 · letzter Beitrag vom 2. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#1

zehnerpotenzen

  Alt 2. Apr 2006, 15:28
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:
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] <> '0then
      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;
nr stellt eben die genauigkeit ein und genau da ist mein problem

aufruf :

  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
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: zehnerpotenzen

  Alt 2. Apr 2006, 15:54
Servus!

Zeile 23
Delphi-Quellcode:
for e := s to length(help)-1 do
  hs := hs + help[e];
ist so nicht korrekt. Dadurch schneidest du das letzte Zeichen deiner Zahl sozusagen ab.
Immer dran denken: Strings sind 1-basiert, nicht 0-basiert.

Mit
Delphi-Quellcode:
for e := s to length(help) do
  hs := hs + help[e];
sollte es eigentlich funktionieren. (habs jetzt allerdings nicht getestet)
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#3

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:06
vielen herzlichen dank - es klappt

grüße Nico
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#4

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:08
Kein Problem! Sowas kann passieren. Bin da grad auch nur durch Zufall drüber gestolpert
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#5

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:35
Zitat von Nicodius:
ich hab mir eine physik unit geschrieben die eben auch in 10er potenzen umrechnen soll

ich hab mal die negativen 10er potenzen zeurst gemacht

function TPhysic.Potenz10(z: real; nr : Integer): String;
huch, da stehen mir ja sämtliche Haare rechtwinklig vom Kopf ab, bei diesem Umweg über Strings...

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;
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#6

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:41
mit Verlaub : jetzt stehen mir aber die haare weg

bitte erklär mir ich mags verstehen

danke aber vielmals scheint ja weniger aufwand zu sein aber wies funktioniet würd ich gerne wissen
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:50
Wenn gilt 10^x=y, dann gilt x=log10(y).

Die Zahl x ist ja gesucht. Verstanden?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#8

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:53
ja jetzt schon viel besser - danke
Nico Müller
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#9

Re: zehnerpotenzen

  Alt 2. Apr 2006, 16:56
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
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#10

Re: zehnerpotenzen

  Alt 2. Apr 2006, 17:07
danke vielmals

prima ne stunde meines lebens wieder an ner völlig dummen lösung verbraten
Nico Müller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz