Stellen anzeigen ohne Rundung

Anfängerfragen zum Programmieren mit PureBasic.
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Stellen anzeigen ohne Rundung

Beitrag von Kallewirsch »

Hallo zusammen,

Hab gerade mal wieder etwas Zeit.....

und weiß wieder mal nicht weiter.

Wie bekomme ich es hin das wirklich nur 6Stellen angezeigt werden ohne das aufgerundet wird?

a17.d = 0.12345678
SetGadgetText(#STRING_INPUT_4,StrD(a17,6))

Danke schon mal

Gruß
Kallewirsch
PureBasic 5.00 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Stellen anzeigen ohne Rundung

Beitrag von ts-soft »

Code: Alles auswählen

Define a17.d = 0.12345678
Define txt.s = StrD(a17)
txt = StringField(txt, 1, ".") + "." + Left(StringField(txt, 2, "."), 6)

SetGadgetText(#STRING_INPUT_4, txt)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Stellen anzeigen ohne Rundung

Beitrag von Josh »

Code: Alles auswählen

a.d = 0.1234567
Debug StrD(a            , 6)
Debug StrD(a - 0.0000005, 6)
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Stellen anzeigen ohne Rundung

Beitrag von Kallewirsch »

Hallo ts und josh

@ts
funktioniert bestens.....aber wie kann ich nun das Ergebnis für weitere berechnungen nehmen z.B. 100 - Ergebnis....(stehe wieder auf der Leitung)

@Josh
funktioniert auch... solange die Zahlen die richtigen sind.

Gruß
Kallewirsch

Code: Alles auswählen

a.d = 325 / 1100000
;Debug StrD(a            )
Debug StrD(a - 0.0000005, 6)

b.d = 100 - a
;Debug StrD(b            )
Debug StrD(b + 0.0000005, 6)




a.d = 325 / 1000000
;Debug StrD(a            )
Debug StrD(a - 0.0000005, 6)

b.d = 100 - a
;Debug StrD(b            )
Debug StrD(b + 0.0000005, 6)
PureBasic 5.00 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Stellen anzeigen ohne Rundung

Beitrag von ts-soft »

Kallewirsch hat geschrieben: @ts
funktioniert bestens.....aber wie kann ich nun das Ergebnis für weitere berechnungen nehmen z.B. 100 - Ergebnis....(stehe wieder auf der Leitung)

Code: Alles auswählen

Define  a17.d = 0.12345678
Define txt.s = StrD(a17)
txt = StringField(txt, 1, ".") + "." + Left(StringField(txt, 2, "."), 6)
Debug txt
Define tmp.d = ValD(txt)
Debug tmp
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Stellen anzeigen ohne Rundung

Beitrag von STARGÅTE »

was hat denn bei den zweiten Teilen das + 0.0000005 zu suchen ?

Es muss immer -0.0000005 damit er immer abschneitet und eben nicht rundet !

UN wenn du immer abschneitest, egal wie groß die zahl war, wirst du immer Fehler behalten

Was also soll dein Beispiel zeigen ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Stellen anzeigen ohne Rundung

Beitrag von Kallewirsch »

Hi ts und Stargate,

@Stargate
das mit den Fehlern ist mir klar.
ich möchte einfach eine berechnete Zahl z.B. 0,134237778 nur 6stellig anzeigen OHNE das aufgerundet wird>>>nämlich so 0,134237.

und nicht so:

Code: Alles auswählen

a.d = 100 / 1475783
Debug StrD(a           )
Debug StrD(a         ,6)

b.d = 100 - a
Debug StrD(b           )
Debug StrD(b         ,6)

@ts
Danke.....für die Hilfe.......jetzt krieg ich das hin

Gruß
Kallewirsch
PureBasic 5.00 (Windows - x86)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Stellen anzeigen ohne Rundung

Beitrag von STARGÅTE »

Jo und das geht "einfacher" wenn du das Runden von StrD manipulierst:

Hier n Proceduer dafür, die auch mit negativen Zahlen arbeitet:

Code: Alles auswählen

Procedure.s Cut(Value.d, Position.i)
  If Value < 0
    ProcedureReturn StrD(Value+Pow(10,-Position)*0.5, Position)
  Else
    ProcedureReturn StrD(Value-Pow(10,-Position)*0.5, Position)
  EndIf
EndProcedure

a.d = 100 / 1475783
Debug StrD(a   )
Debug StrD(a, 6)
Debug Cut (a, 6)

b.d = 100 - a
Debug StrD(b   )
Debug StrD(b, 6)
Debug Cut (b, 6)

c.d = -a
Debug StrD(c   )
Debug StrD(c, 6)
Debug Cut (c, 6)

d.d = -100+a
Debug StrD(d   )
Debug StrD(d, 6)
Debug Cut (d, 6)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Stellen anzeigen ohne Rundung

Beitrag von Kallewirsch »

Hallo,

danke für eure Beispiele........aber ich kriegs nicht gebacken.

seht euch bitte mal den Code unten an
warum kommt denn da so ne Zahl heraus?????

Gruß
Kallewirsch

Code: Alles auswählen

Define  a17.d = 0.144683632785
Define txt.s = StrD(a17)
txt = StringField(txt, 1, ".") + "." + Left(StringField(txt, 2, "."), 6)
Debug txt

;noch ist alles ok.

Define tmp.d = 100 - ValD(txt)
Debug tmp

;warum kommt nun als Ergebnis 99.85531699999.....und nicht 99.855317 ?????
PureBasic 5.00 (Windows - x86)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Stellen anzeigen ohne Rundung

Beitrag von Josh »

Kallewirsch hat geschrieben:warum kommt denn da so ne Zahl heraus?????
weil es eben keine unendliche genauigkeit gibt
Antworten