Autor Beitrag
Sy-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177



BeitragVerfasst: Mi 26.07.06 16:50 
Ich sehe schon ich bin dir Sympatisch JayEff :wink:

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 :roll:

_________________
Problems connecting People
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mi 26.07.06 20:37 
user profile iconSy- 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 27.07.06 00:15 
[OT]
user profile iconSy- hat folgendes geschrieben:
Ich sehe schon ich bin dir Sympatisch JayEff :wink:

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.)

user profile iconSy- hat folgendes geschrieben:
Da frage ich mich aber wo der Sinn überhaupt sein soll in der Funktion :roll:

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 :D , aber.. fällt das nicht unter den Kündigungsschutz? :motz: [/OT]


Zurück zum Thema.
user profile iconjayeff 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 27.07.06 08:48 
user profile iconSpaceguide also dein Ton ist wirklich ein bischen komisch wenn man bedenkt, dass wir hier zusammensitzen um dir bei deinem Problem zu helfen...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177



BeitragVerfasst: 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 :roll:

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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 27.07.06 09:40 
user profile iconSy- 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-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 27.07.06 17:14 
Hallo,

@user profile iconSpaceguide, 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 user profile iconSy- geposteten Code.
Mit trunc entspricht er IMHO user profile iconjasoculs letztem Code.

Hab den Code mal in eine Funktion verpackt und übersichtlicher(besser?) gecodet:
ausblenden 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))//trunc, dann 12345,6 = 12345
    else
      begin
      Result := Format('%.*f',[aDigits-1,e]);
      Result := Format('%.*g',[aDigits,StrToFloat(Result)]);
      end;
end;{function FloatToStrDigits(...)}

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 27.07.06 17:29 
@Lannes: Schmiert bei 0 ab.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 27.07.06 17:31 
Wenn sichs nur um 0 dreht, machste halt ein if e=0 then Result:='0' else begin {alte funktion} end; rein ^^

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.