Konverter dobbelt til streng, fjern decimaler

1. Introduktion

I denne tutorial tager vi et kig på forskellige måder at konvertere en dobbelt værdi til en Snorfjerner decimaler.

Vi ser på, hvordan vi gør det, når vi bare vil afkorte decimaldelen, og når vi vil afrunde den.

2. Afkortning ved hjælp af støbning

Hvis vores dobbelt værdi er inden for int rækkevidde, kan vi kast det til en int. Medvirkende afkorter decimaldelen, hvilket betyder, at den afskærer den uden at foretage nogen afrunding.

Denne tilgang er ca. 10 gange så hurtig som de andre tilgange, vi vil se på.

Når det er en int, så kan vi derefter give det til Værdi af metodepå den Snor klasse:

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

Vi kan med sikkerhed bruge denne tilgang, når vi garanteres, at den dobbelte værdi er inden for en int. Men hvis vores værdi overstiger det, fungerer casting ikke som vi ønsker.

3. Afrunding ved hjælp af String.format ()

Nu er de resterende tilgange ikke så begrænsede som casting, men de har deres egne nuancer.

For eksempel er en anden tilgang at bruge format metode til Snor klasse. Den første parameter for metoden specificerer, at vi formaterer en flydende punktværdi med nul cifre efter decimaltegnet:

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

Det format metode bruger HALF_UP afrunding som afrundes, hvis værdien efter brøkdelen er 0,5 eller derover. Ellers returnerer det tallet før decimaltegnet.

Og mens det er simpelt, Streng.format er den langsomste måde at gøre dette på.

4. Brug NumberFormat.format ()

Det NumberFormat klasse giver også en format metode svarende til Snor klasse, men NumberFormat er hurtigere, og med det kan vi angive afrundingstilstand for at opnå enten afkortning eller afrunding.

Det setMaximumFractionDigits () metode fortæller formateringen, hvor mange brøkcifre efter decimaltegnet, der skal medtages i output:

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

Mærkeligt nok NumberFormat bruger ikke HALF_UP som standard. I stedet bruger det HALV_EVEN afrunding som standard, hvilket betyder at den afrunder som normalt undtagen ved 5, i hvilket tilfælde den vælger det nærmeste lige nummer.

Mens HALV_EVEN er nyttigt med statistisk analyse, lad os bruge HALF_UP at være konsekvent:

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

Og, vi kan ændre dette og opnå afkortning ved at indstille formateringen til at bruge ETAGE afrundingstilstand i stedet:

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

Og nu trunker det i stedet for rundt.

5. Brug DecimalFormat.format ()

Svarende til NumberFormat, det Decimalformat klasse kan bruges til at formatere dobbelt værdier. I stedet for at indstille outputformatet med metodeopkald, vi kan fortælle formateringen, hvilket output vi ønsker ved at give konstruktøren et specifikt mønster:

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

“#, ###” mønsteret betyder, at vi ønsker, at formateringen kun returnerer hele talets del. Det signalerer også, at vi vil have cifrene grupperet i tre, adskilt med komma.

De samme afrundingsstandarder gælder her, så hvis vi ønsker at afgive en afkortet værdi, kan vi indstille afrundingstilstand til ETAGE:

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

6. Brug BigDecimal.toString ()

Den sidste tilgang, vi vil se på, er BigDecimal, som vi inkluderer, fordi det udfører sig NumberFormat og Decimalformat for større dobbelts.

Vi kan bruge BigDecimal'S setScale metode til at fortælle, om vi vil afrunde eller trunke:

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

Huske på, at BigDecimals er uforanderlige, så vi skal ligesom strenge nulstille værdien.

Og så ringer vi bare BigDecimal'S toString:

Streng afrundet = big.toString ();

7. Konklusion

I denne vejledning vi så på de forskellige måder, hvorpå vi kan konvertere en dobbelt til en Snor mens du fjerner decimaler. Vi leverede tilgange, der enten udsendte afrundede eller afkortede værdier.

Som sædvanligt er prøverne og benchmarks tilgængelige på GitHub.