Programuojant kalba galima susidurti su tokia situacija, kai atliekant dalybos operaciją gaunate tam tikrą rezultatą, kurio formatą norima pakeisti į trumpesnį, nes gautasis rezultatas per ilgas. Tarkime atliekamas dalybos veiksmas su dviem tipo skaičiais: () 1 / () 3, rezultatas 0.33333334. tipo skaičiams gautume: () 1 / () 3, rezultatas dar ilgesnis 0.3333333333333333.
Taigi, dažnai toks rezultatas netenkina, nes yra per ilgas. Tarkime, kad reikia pateikti rezultatą dviejų skaičių po kablelio tikslumu.

Tai padaryti galima įvairiai. Pateiksime keletą pavyzdžių.

Bene lengviausias būdas būtų parašyti:

float a = (float) 1 / (float) 3;
 
double b = (double) 1 / (double) 3;
 
System.out.format("Float tipo skaičius %.2f%n", a);
System.out.format("Double tipo skaičius %.2f", b);

%2f - reiškia kad realusis skaičius pateikiamas dviejų skaičių po kablelio formatu
%n - naujos eilutės simbolis žymintis, naują eilutę
a - tipo rezultatas
b - tipo rezultatas

Rezultatas:

tipo skaičius 0,33
tipo skaičius 0,33

Tą patį galima gauti ir panaudojant DecimalFormat (.text.DecimalFormat) klasę. Kad pasinaudotume jos galimybėmis kodo pradžioje, reikia nepamiršti įrašyti import .text.*; Ši klasė turi labai plačias galimybes.
Taigi pasinaudoti DacimalFormat galimybėmis galima naudojant tokį metodą:

public void customFormat(String pattern, float value)
{
DecimalFormat dForm = new DecimalFormat(pattern); // sukuriamas klasės objektas pattern formato
String output = dForm.format(value);		  // String tipo kintamajam priskiriama format(value) reikšmė
System.out.println(output);			  // rezultatas išvedamas į ekraną
}
 
// String pattern - String tipo kintamasis apibrėžiantis rezultato formatą.
// float value - float tipo kintamasis iš kurio formuojamas rezultatas.
// float value pakeisti double value - jei skaičiuojama double tipo kintamajam

Toliau kreiptis į šį metodą galima taip:

customFormat("#.##", a);

# nurodo kad reikia naudoti tikrines reikšmes prieš ir po kablelio

Rezultatas:

0,33

Norint perduoti b kaip parametrą, reikia pakeisti ‘ value’ į ‘ value’
Verta paminėti, kad “#.##” pakeitus “0.00″ rezultatas gaunamas analogiškas, tačiau ne visada.

customFormat("00.00", a);

Rezultatas įgautų tokį pavidalą:

00,33.

o

customFormat("##.##", a);

Rezultatas:

0,33

Taigi reikia atsiminti, jog # ir 0 reikšmės skirtingos.

Kiek kitaip yra, jeigu norime ne išvesti į ekraną gautą rezultatą, bet tipo kintamajį b priskirti kitam tipo kintamajam c, tik jau ne 0.3333333333333333 pavidale, o 0.33. Tam aukščiau aptarti būdai netinka. Kaip vieną iš problemos sprendimo būdų galima naudoti tokį metodą:

public double formatas( double d, int dp )
{
double x= Math.pow( 10, dp ) ;
return( Math.round( d * x) / x) ;
}
 
// double d tai skaičius, kuris bus formuojamas,
// int dp - kiek skaičių po kabelio turės suformuotas rezultatas

Priskirti galėtume šitaip:

c = formatas(b, 2);

Jeigu b = 0.3333333333333333, tai c = 0.33. Taigi gaunamas tipo kintamasis c, kurio reikšmę galima tiek išspausdinti į ekraną, tiek panaudoti skaičiavimuose.

Be abejonės be čia pateiktų pavyzdžių galima sugalvoti ir kitokių būdų minėtoms problemoms spręsti, o tiems kas nenori galvoti savo, tiesiog gali naudoti pateiktus.

Panašūs straipsniai


“float ir double tipo kintamųjų formatavimas Java kalboje” komentarų: 3

  1. enc

    parašyk programą, kur su java reikia sudėti du skaičius įvestus klaviatūrą

  2. Shw

    float ir double tipai labai retai kur pritaikomi. Jų negalima naudoti ten, kur reikia tikslaus rezultato (pvz. skaičiuoti kainą). Tam yra BigDecimal (ir giminingi) tipai, ir jų formatavimas visai kitaip organizuojamas.

  3. saras

    O pagal ka java nustato, kad sveikąją dalį atskirti kableliais, o ne taškais?

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.