Konverter dobbelt til streng, og fjern desimaler

1. Introduksjon

I denne opplæringen tar vi en titt på forskjellige måter å konvertere en dobbelt verdi til en String, fjerne desimalene.

Vi skal se på hvordan vi gjør det når vi bare vil avkorte desimaldelen og når vi vil runde den.

2. Avkutting ved hjelp av avstøpning

Hvis vår dobbelt verdien er innenfor int rekkevidde, kan vi kaste den til en int. Medvirkende avkorter desimaldelen, noe som betyr at den kutter den av uten å gjøre noen avrunding.

Denne tilnærmingen er omtrent ti ganger så rask som de andre tilnærmingene vi vil se på.

Når det er en int, så kan vi gi den videre til verdien av metodeString klasse:

Streng avkortet = String.valueOf ((int) doubleValue);

Vi kan trygt bruke denne tilnærmingen når vi er garantert at dobbeltverdien er innenfor et int. Men hvis verdien vår overstiger det, vil casting ikke fungere som vi ønsker.

3. Avrunding ved hjelp String.format ()

Nå er de gjenværende tilnærmingene ikke like begrensede som casting, men de har sine egne nyanser.

For eksempel er en annen tilnærming å bruke format metoden for String klasse. Den første parameteren for metoden spesifiserer at vi formaterer en flytende verdi med null sifre etter desimaltegnet:

Streng avrundet = String.format ("%. 0f", doubleValue);

De format metoden bruker HALF_UP avrunding som vil rundes opp hvis verdien etter brøkdelen er 0,5 eller høyere. Ellers returnerer tallet før desimaltegnet.

Og mens det er enkelt, String.format er den tregeste måten å gjøre dette på.

4. Bruke NumberFormat.format ()

De NumberFormat klasse gir også en format metode som ligner på String klasse, men NumberFormat er raskere, og med det kan vi spesifisere avrundingsmodus for å oppnå enten avkorting eller avrunding.

De setMaximumFractionDigits () metoden forteller formatereren hvor mange brøk sifre etter desimaltegnet som skal inkluderes i utdataene:

NumberFormat nf = NumberFormat.getNumberInstance (); nf.setMaximumFractionDigits (0); Streng avrundet = nf.format (doubleValue);

Merkelig nok NumberFormat bruker ikke HALF_UP som standard. I stedet bruker den HALF_EVEN avrunding som standard, noe som betyr at den vil rundes som normalt bortsett fra 0,5, i så fall vil den velge nærmeste partall.

Samtidig som HALF_EVEN er nyttig med statistisk analyse, la oss bruke HALF_UP å være konsekvent:

nf.setRoundingMode (RoundingMode.HALF_UP); Streng avrundet = nf.format (doubleValue);

Og, vi kan endre dette og oppnå avkorting ved å stille formateringen til å bruke GULV avrundingsmodus i stedet:

nf.setRoundingMode (RoundingMode.FLOOR); Streng avkortet = nf.format (doubleValue)

Og nå vil den avkuttes i stedet for rund.

5. Bruke DecimalFormat.format ()

Lik NumberFormat, den Desimalformat klasse kan brukes til å formatere dobbelt verdier. Imidlertid, i stedet for å angi utdataformatet med metodeanrop, vi kan fortelle formateringen hvilken effekt vi ønsker ved å gi konstruktøren et bestemt mønster:

DecimalFormat df = new DecimalFormat ("#, ###"); df.setRoundingMode (RoundingMode.HALF_UP); Streng avrundet = df.format (doubleValue);

“#, ###” mønsteret betyr at vi vil at formateringen bare skal returnere heltall av inngangen. Det signaliserer også at vi vil at sifrene skal grupperes i tre, atskilt med komma.

De samme avrundingsstandardene gjelder her, så hvis vi vil sende en avkortet verdi, kan vi sette avrundingsmodus til GULV:

df.setRoundingMode (RoundingMode.FLOOR); Streng avkortet = df.format (doubleValue)

6. Bruke BigDecimal.toString ()

Den siste tilnærmingen vi skal se på er BigDecimal, som vi inkluderer fordi det utfører NumberFormat og Desimalformat for større dobbelts.

Vi kan bruke BigDecimal‘S setScale metode for å fortelle om vi vil avrunde eller avkutte:

dobbelt storDobbelt = 345_345_345_345.56; BigDecimal big = new BigDecimal (largeDouble); stor = big.setScale (0, RoundingMode.HALF_UP);

Husk at BigDecimals er uforanderlige, så som Strings, må vi nullstille verdien.

Og så ringer vi bare BigDecimal‘S toString:

Streng avrundet = big.toString ();

7. Konklusjon

I denne veiledningen, vi så på de forskjellige måtene vi kan konvertere a på dobbelt til en String mens du fjerner desimaler. Vi ga tilnærminger som ville gi enten avrundede eller avkortede verdier.

Som vanlig er prøvene og referansene tilgjengelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found