C# Format om € 0,123 weer te geven als € 0,12

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • MC trouble
  • Registratie: December 2010
  • Laatst online: 27-11-2024
Hoe maak ik een script om de derde decimaal te verbergen? Een paar van onze producten kosten minder dan 1 cent. Om dit in te kunnen voeren staat alles op 3 decimalen |:( Zou ik dit met een script kunnen verbergen?

Afbeeldingslocatie: https://tweakers.net/ext/f/x1UQX73GcRcklJ7pov31posC/thumb.png

[code]
String.Format("{0:0.##}", 123.4567);
decimal this.item.value = #0,00m
[/code

In C# kom ik niet verder dan dik gedrukt en kleurtjes :+ De afronding maakt niet uit op de eindbedragen. Als het maar in een normaal 2 decimalen format staat.

Bij voorbaat dank _/-\o_ _/-\o_ _/-\o_

Alle reacties


Acties:
  • 0 Henk 'm!

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 07:59

Even niets...


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niet rounden, formatten!

Dit is een representatie-ding. Je wilt je uitvoer geformatteerd weergeven. Je wil niet de onderliggende waarde aanpassen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • AlphaRomeo
  • Registratie: Maart 2007
  • Laatst online: 09:37

AlphaRomeo

FP PowerMod
.ToString("0.00") regelt altijd twee decimaalplaatsen en visuele afronding volgens mij.

Acties:
  • 0 Henk 'm!

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 07:59
@.oisyn ah goed punt, ik dacht dat hij gewoon in zijn data laag zat.

Even niets...


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

@FireDrunk Hmm misschien maak ik die aanname, je hebt op zich gelijk dat dat niet heel duidelijk uit de topicstart blijkt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • +1 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59

https://niels.nu


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 06-10 19:38
Met rounden dmv formatting krijg je meestal ook dit gedrag:
For example, when rounded to two decimals, the value 2.345 becomes 2.34 and the value 2.355 becomes 2.36. This process is known as rounding toward even, or banker's rounding. It minimizes rounding errors that result from consistently rounding a midpoint value in a single direction.
De vraag is of je dat wenselijk vindt, of dat je net zoals op school 2.345 naar 2.35 wilt laten afronden.
In dat geval moet je het toch met een functie rounden ipv middels de formatting (tenzij C# string formatting anders werkt dan C, perl etc, maar dat acht ik onwaarschijnlijk doorgaans dezelfde IEEE standaard op dezelfde wijze implemeteren)

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 09:07

Haan

dotnetter

Kater? Eerst water, de rest komt later


Acties:
  • +1 Henk 'm!

  • Mrlten
  • Registratie: Februari 2005
  • Laatst online: 06:50

Mrlten

Premium Deluxe Plus

MC trouble schreef op vrijdag 20 juli 2018 @ 10:44:
Hoe maak ik een script om de derde decimaal te verbergen? Een paar van onze producten kosten minder dan 1 cent. Om dit in te kunnen voeren staat alles op 3 decimalen |:( Zou ik dit met een script kunnen verbergen?

[afbeelding]

[code]
String.Format("{0:0.##}", 123.4567);
decimal this.item.value = #0,00m
[/code

In C# kom ik niet verder dan dik gedrukt en kleurtjes :+ De afronding maakt niet uit op de eindbedragen. Als het maar in een normaal 2 decimalen format staat.

Bij voorbaat dank _/-\o_ _/-\o_ _/-\o_
Waarom staat daar this.Item.Value.ToString()? Dat gaat nooit werken als je de value al ge-ToString't mee geeft aan de string.Format(...).

Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 08:23
Volgens mij is de vraag tweeledig:
  1. hoe kan ik een bedrag afronden op twee decimalen
  2. hoe kan ik dit in de functie Execute() regelen?
Vraag 1 is inmiddels wel beantwoord.

De werking van Execute() is niet zichtbaar maar je ziet wel enkele voorbeelden van verwijzingen naar this.Item.Value die je kunt getten en setten.

Vraag 2 is op te delen in de volgende subvragen/subroutines:
  1. Waar haal ik het bedrag vandaan (item.Value)?
  2. Welk datatype heeft dit veld?
  3. Moet ik dit type wellicht aanpassen (bijv. van string naar decimal)?
  4. Hoe plaats ik het geformatteerde bedrag terug in het veld (item.Value)?
Ergens tussen subroutine 3 en 4 zal je dus pas de rounding/formatting uit hoeven voeren :)

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • MC trouble
  • Registratie: December 2010
  • Laatst online: 27-11-2024
Kleine toelichting terwijl ik het bovenstaande probeer te begrijpen:

een 'schroef' kost € 0,003. Ik verkoop er 125 = € 0,425. De totale offerte komt bij ons zelden onder de €1000,- dus die 0,005 cent maakt mag vervallen.

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 06:21
MC trouble schreef op vrijdag 20 juli 2018 @ 11:32:
Kleine toelichting terwijl ik het bovenstaande probeer te begrijpen:

een 'schroef' kost € 0,003. Ik verkoop er 125 = € 0,425. De totale offerte komt bij ons zelden onder de €1000,- dus die 0,005 cent maakt mag vervallen.
Weet je dat zeker? Dan geef je bijvoorbeeld altijd twee schroeven weg in zulke gevallen.

Acties:
  • 0 Henk 'm!

  • MC trouble
  • Registratie: December 2010
  • Laatst online: 27-11-2024
Het is voor een productie bedrijf. Die paar schroeven vallen in het niet bij wat er verloren gaat in het werk

Acties:
  • +1 Henk 'm!

  • Roxors
  • Registratie: April 2009
  • Laatst online: 17-09 12:59
code:
1
string.Format("{0:C2}", this.Item.Value)


of via interpolated string (sinds C# 6)

code:
1
$"{this.Item.Value:C2}"


Meer formatting kun je op MSDN raadplegen.

[ Voor 66% gewijzigd door Roxors op 20-07-2018 11:46 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MC trouble
  • Registratie: December 2010
  • Laatst online: 27-11-2024
Bedankt voor alle informatie! Op de berekende waardes werkt het goed. Het werkt helaas niet wanneer het een opgezochte waarde is. Ik denk dat het script daarvoor op de verkeerde plaats staat. Maandag weer verder.

Heel er bedankt!
Pagina: 1