Autor |
Beitrag |
Sy-
      
Beiträge: 177
|
Verfasst: Mi 26.07.06 16:50
Ich sehe schon ich bin dir Sympatisch JayEff
Aber du hast recht, etwas in der Richtung meint er wo ich drüber sah.
Vor dem Komma sollte scheinbar nichts weggetan werden.
Da frage ich mich aber wo der Sinn überhaupt sein soll in der Funktion 
_________________ Problems connecting People
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mi 26.07.06 20:37
Sy- hat folgendes geschrieben: | Spaceguide, jetzt wird es zwar OT aber:
Arbeite mit den Scripten die du bekommst und verlang nicht auf dich exakt geschneiderte Scripte.
Wir sind hier um dir zu helfen, nicht um deine Arbeit zu erledigen.
|
Also wenn ich irgendwas haben will, dann kann ich auch gleich FloatToStrF nehmen, das funktioniert noch besser als das was du fabriziert hast. Wenn einer fragt, wie man zwei Zahlen addiert und du schreibst a-b und meckerst danach, dass er es sich gefälligst selbst anpassen soll, dann bist du überhaupt keine Hilfe.
Zitat: |
Meins funktioniert nämlich auch und wie crowley schon sagte muss ein parameter mehr rein.
|
myRound('1234.123123',4) = 1234.12 => FALSCH
Zitat: |
Fällt mir schwer zu glauben, dass du den anderen Script selber gecoded hast wenn du nichtmal unsere Scripte anwenden kannst.
|
Diplom-Informatiker, 10 Jahre Delphi-Erfahrung ... ich kann programmieren, glaub's mir.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 27.07.06 00:15
[OT] Sy- hat folgendes geschrieben: | Ich sehe schon ich bin dir Sympatisch JayEff |
Woran liegt das nur, dass ich Sarkasmus erkenne... (ich verweise an dieser Stelle an den Zusatz meiner Signatur, nicht dass du mich schon wieder auf Rechtschreibfehler aufmerksam machst: 18 jähriger Gymnasiast, Mathe 15 Punkte, tut mir ja leid, dass ich in Deutsch weniger gut bin.)
Sy- hat folgendes geschrieben: | Da frage ich mich aber wo der Sinn überhaupt sein soll in der Funktion  |
Ich weis nicht, wie oft du dich mit den Gedanken anderer MEnschen auseinander gesetzt hast bzw deren Fragen zu Funktionen beantwortet hast: Die Frage stellt sich häufig. Ich habe allerdings in eigener Erfahrung bemerkt, dass Menschen IMMER einen Grund für ihr handeln haben und wenn wir nicht jede Zeile seines Programms kennen, was unwahrscheinlich ist, können wir nicht wissen, ob seine Funktion wirklich Sinn macht. Aus diesem Grund sollten wir so gut als möglich seine Frage beantworten und nicht seine Programmierkenntnisse auf überhebliche Art in Frage stellen. Versteh mich nicht falsch. Du hast dich schon 2 mal über andere Leute lustig gemacht, und ich glaube nicht, dass du selbst der Meinung bist, das würde in irgenteiner Art helfen... Also lass es doch bitte ;>
Zu deiner Signatur: Vollkommen richtig, gefällt mir  , aber.. fällt das nicht unter den Kündigungsschutz?  [/OT]
Zurück zum Thema.
jayeff hat folgendes geschrieben: | Hier gehts darum, eine Zahl nicht auf ihre Nachkommastellen, sondern auf ihre Stellen insgesamt zu runden, oder? Also während 1,12344 zu 1,234(4?) wird, wird 12,344 zu 12,34(4?), oder? Versuch doch noch ein paar mehr Beispiele zu geben, und wenn du im endeffekt nur 4 ziffern haben willst, was wird dann aus 12345? |
Ähm ich muss gestehen, dass ich mir deinen QT nicht angeguckt hab...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Do 27.07.06 08:48
Spaceguide also dein Ton ist wirklich ein bischen komisch wenn man bedenkt, dass wir hier zusammensitzen um dir bei deinem Problem zu helfen...
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 27.07.06 09:02
Leute, haltet doch mal den Ball flach. So führt das doch zu nichts.
Wenn einer mal einen Parameter vergessen hat, das kann mal passieren. Bei meinem Beispiel habe ich auch erst On-The-Fly programmiert und hinterher eine Funktion daraus gemacht. Dabei hatte ich auch was vergessen (ist übrigens korrigiert). Ja und? Ist doch menschlich. Da muss man niemanden einen Vorwurf machen und der Fehler-Produzent muss nicht sauer sein, wenn das bemerkt wird.
|
|
Sy-
      
Beiträge: 177
|
Verfasst: Do 27.07.06 09:09
Spaceguide, wenn das mit FloatToStrF so ginge, dann würdest du es auch damit machen. Hast doch vorhin sogar selbst jede Variante verneint, weil da immer diese Abkürzungen kommen.
Das deine Reaktion unfreundlich war ist nicht zu bestreiten.
Du hast das Problem, dass du dich sehr schlecht ausdrückst. Obwohl ich jetzt schon gepostet habe, dass ich es nicht verstehe und JayEff eine Frage zusätzlich stellt ist es für mich fragwürdig wie man dir helfen soll.
Ich habe gemeint, dass ich es richtig verstanden habe und war deswegen etwas biestig. Das war darauf bezogen, dass die Variablen namen und die funktion gleich heißen sollte und das habe ich nicht eingesehen.
Nun ist klar, dass es anders sein soll.
Aber wie?
Die Frage ist ja nicht wie das Ergebnis auszusehen hat, sondern warum es so auzszusehen hat.
Du hättest nun ruhig sagen können:
myRound('1234.123123',4) = 1234.12 => FALSCH
myRound('1234.123123',4) = 1234 => RICHTIG
myRound('234.123123',4) = 234.1 => RICHTIG
Schon hätten wir dir helfen können, da es unsere Frage beantwortet
Aber nun für den Sinn. Also so sehe ich den Sinn, hat auch gewisse Vorteile.
Für meinen Geschmack aber fehlt dann für höhere Zahlen eine Abkürzung wie K (Tausend) und M usw. dass man kurze Zahlen hat und halt das relevanteste auch bei nicht so niedrigen. Vielleicht hat man auch ein Beschränktes Display.
und folgendes:
Zitat: |
Diplom-Informatiker, 10 Jahre Delphi-Erfahrung ... ich kann programmieren, glaub's mir.
|
Ich möchte ja niemanden lustig machen, auch wenn es sich manchmal so anhört, aber der Diplom und 10Jahre Erfahrung reichen dir nicht für eine saubere Lösung dieser Aufgabe? Ich würde das wie mit einer Kanone auf einen Spatz sehen aber dem ist nicht so.
Bevor wir hier aber noch länger Diskutieren, habe ich mir einfach dein Script angeschaut und hier ist meine saubere Lösung dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Function myRound(Zahl:real; Gen:integer):String; var i,c:integer; begin i:=ansipos(',',pchar(floattostr(zahl))); c:=gen-i+1; if(c<0)then c:=0; result:=floattostr(round(zahl*power(10,c))/power(10,c)); end; |
Grüße
_________________ Problems connecting People
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 27.07.06 09:40
Sy- hat folgendes geschrieben: |
Ich möchte ja niemanden lustig machen, auch wenn es sich manchmal so anhört, aber der Diplom und 10Jahre Erfahrung reichen dir nicht für eine saubere Lösung dieser Aufgabe? Ich würde das wie mit einer Kanone auf einen Spatz sehen aber dem ist nicht so.
|
Ich habe es ja gelöst gehabt, aber mir sah das zu pfuschig aus, weshalb ich mal nach zweiten Meinungen gefragt habe. Es ist besser eine Standardfunktion zu verwenden, als selbst etwas zu stricken.
Zitat: |
Bevor wir hier aber noch länger Diskutieren, habe ich mir einfach dein Script angeschaut und hier ist meine saubere Lösung dazu: |
myRound(0.00001,4) = 1E-5 => FALSCH (sollte 0 sein)
myRound(-100.123,4) = -100 => FALSCH (sollte -100.1 sein)
Komma ist hard-kodiert
|
|
Sy-
      
Beiträge: 177
|
Verfasst: Do 27.07.06 10:21
Das mit dem Minus hab ich vergessen.
Wegen dem 1E-05 hab ich einfach mit dem Single gelöst, hat halt den Nachteil, dass er höhere Zahlen und ganz kleine Zahlen nicht mehr erfasst. Da es aber bei dir im Einsatz war, denke ich, dass es zu keinen Problemen führen sollte.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Function myRound(Zahl:single; Gen:integer):String; var i,c,m:integer; begin if(zahl<0)then m:=-1 else m:=1; zahl:=zahl*m; i:=ansipos(',',pchar(floattostr(zahl))); c:=gen-i+1; if(c<0)then c:=0; result:=floattostr(round(zahl*power(10,c))/power(10,c)*m); end; |
_________________ Problems connecting People
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 27.07.06 11:05
Meine gestrige Variante war wohl ziemlich doof. Hier eine neue, die mit allen hier angegebenen Zahlen das richtige Ergebnis bringt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| function GerundeteZahl(Zahl : Extended; Rundung : Integer) : String; var i : Integer; begin if trunc(abs(zahl)) = 0 then dec(rundung); if trunc(abs(zahl)) >= power(10, rundung) then begin result := FloatToStr(trunc(zahl)); end else begin i := 0; while trunc(abs(zahl)) > 0 do begin inc (i); zahl := zahl / 10; end;
zahl := zahl * power(10, rundung); zahl := round(zahl); zahl := zahl / power(10, rundung-i); result := FloatToStr(zahl); end; end; |
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 27.07.06 17:14
Hallo,
@ Spaceguide, hast Du eigentlich meinen zuletzt geposteten Code getestet?
Zum Beitrag in diesem Thread
Setzt man dort round ein, IMHO entspricht das Ergebnis Deinem und dem zuletzt von Sy- geposteten Code.
Mit trunc entspricht er IMHO jasoculs letztem Code.
Hab den Code mal in eine Funktion verpackt und übersichtlicher(besser?) gecodet:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function FloatToStrDigits(e: extended;aDigits: byte): String; begin if Round(Log10(ABS(e)))+1 > aDigits then Result := IntToStr(round(e)) else begin Result := Format('%.*f',[aDigits-1,e]); Result := Format('%.*g',[aDigits,StrToFloat(Result)]); end; end; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 27.07.06 17:29
@Lannes: Schmiert bei 0 ab.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 27.07.06 17:31
Wenn sichs nur um 0 dreht, machste halt ein if e=0 then Result:='0' else begin end; rein ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
|