Giriş
Şu satırı dahil ederiz.
DecimalFormat gösterimsel amaçlı olarak double, BigDecimal gibi sınıfları String'e çevirir. Decimal format NumberFormat sınıfından kalıtır.
DecimalFormat ile para formatlama işleri ile ilgili aldığım notlar aşağıda. Daha detaylı bilgi için Customizing Formats başlıklı yazıya göz atabilirsiniz.
Burada dikkat edilmesi gereken nokta eğer verilen formatlama hassasiyetinden daha fazla küsürat varsa, sayı yuvarlamaya tabi tutulur.
constructor - String
Şöyle yaparız.
DecimalFormatSymbols nesnesi alır. Sisteminkinden farklı bir locale kullanmak istersek şöyle yaparız.
Örnek - double
Şöyle yaparız.
Şöyle yaparız.
Belli bir locale kullanan instance alınabilir.
Formatlama için verilen string yerine aynısı kodla da yapılabilir. Şöyle bir format'ımız olsun.
Şöyle yaparız.
Şöyle yaparız.
setRoundingMode metodu
DecimalFormat sınıfının setRoundingMode() metodu kullanılarak, yuvarlama metodu değiştirilebilir.
1. CEILING
Şöyle yaparız.
Eksi sonsuza doğru yuvarlar. Eksi sayılarda bu açından DOWN'dan farklı sonuç verir. Şöyle yaparız.
Sıfıra doğru yuvarlar. Eksi sayılarda bu açıdan FLOOR'dan farklı sonuç verir. Şöyle yaparız.
1. Karakter #
Formatlamada en çok # işareti kullanılıyor. # kaç tane hane istendiğini belirtir. Sayı istenilen haneden fazlasına sahipse, yuvarlamaya tabi tutulur. Eğer istenilen haneden azına sahipse, # karakteri yerine bir şey yazılmaz!
1.1 İstenenden Az Küsurat Olması
Örnek
Küsurat hanesi 5 taneye kadar müsade edilmiş. Ancak elimizdeki para değeri sadece 3 haneye sahip. Dolayısıyla yazılacak sayılar yazılıyor, geri kalan haneler doldurulmuyor
Şöyle yaparız.
1.2 İstenenden Fazla Küsurat Olması
Örnek
Şöyle bir kod olsun.
2. Karakter 0
0 kaç tane hane istendiğini belirtir. Sayı istenilen haneden fazlasına sahipse, yuvarlamaya tabi tutulur. Eğer istenilen haneden azına sahipse, 0 karakteri yerine 0 yazılır!
2.1 İstenenden Az Küsurat Olması
Örnek ver
2.2 İstenenden Fazla Küsurat Olması
Örnek
Şöyle yaparız
Şu satırı dahil ederiz.
import java.text.DecimalFormat;
Decimal format yerine String.format() ta rahatça kullanılabilir. Şu iki kod aynı işi görür.String number=String.format("%.7f", 1.234567777);
ileDecimalFormat df = new DecimalFormat("####0.000000");
String result = df.format(1.234);
System.out.println(result);
aynıdır.DecimalFormat gösterimsel amaçlı olarak double, BigDecimal gibi sınıfları String'e çevirir. Decimal format NumberFormat sınıfından kalıtır.
DecimalFormat ile para formatlama işleri ile ilgili aldığım notlar aşağıda. Daha detaylı bilgi için Customizing Formats başlıklı yazıya göz atabilirsiniz.
Burada dikkat edilmesi gereken nokta eğer verilen formatlama hassasiyetinden daha fazla küsürat varsa, sayı yuvarlamaya tabi tutulur.
HALF_EVEN yuvarlamada, sayı tam ortadaysa, her zaman çift olan sayıya yuvarlanır.DecimalFormat provides rounding modes defined in RoundingMode for formatting. By default, it uses RoundingMode.HALF_EVEN.
constructor - String
Şöyle yaparız.
DecimalFormat df = new DecimalFormat("#.##");
constructor - String + DecimalFormatSymbolsDecimalFormatSymbols nesnesi alır. Sisteminkinden farklı bir locale kullanmak istersek şöyle yaparız.
DecimalFormat df = new DecimalFormat("#.##",
DecimalFormatSymbols.getInstance(Locale.ENGLISH));
format metoduÖrnek - double
Şöyle yaparız.
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Örnek - BigDecimalŞöyle yaparız.
String str = df.format(new BigDecimal(95.1));
getInstanceBelli bir locale kullanan instance alınabilir.
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
setGroupingSize metoduFormatlama için verilen string yerine aynısı kodla da yapılabilir. Şöyle bir format'ımız olsun.
DecimalFormat df = new DecimalFormat("###,###.00", symbols);
Aynısını kodla şöyle yaparız.DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.setGroupingSize(3);
df.setMaximumFractionDigits(2);
setNegativePrefix metoduŞöyle yaparız.
df.setNegativePrefix("(");
setNegativeSuffix metoduŞöyle yaparız.
df.setNegativeSuffix("%)");
DecimalFormat sınıfının setRoundingMode() metodu kullanılarak, yuvarlama metodu değiştirilebilir.
1. CEILING
Şöyle yaparız.
DecimalFormat df = new DecimalFormat("#.####");
df.setRoundingMode(RoundingMode.CEILING);
for (Number n : Arrays.asList(12, 123.12345, 0.23, 0.1, 2341234.212431324)) {
Double d = n.doubleValue();
System.out.println(df.format(d));
}
Çıktı olarak şunu alırım.12
123.1235
0.23
0.1
12341234.2125
2. FLOOREksi sonsuza doğru yuvarlar. Eksi sayılarda bu açından DOWN'dan farklı sonuç verir. Şöyle yaparız.
df.setRoundingMode(RoundingMode.FLOOR);
3. DOWNSıfıra doğru yuvarlar. Eksi sayılarda bu açıdan FLOOR'dan farklı sonuç verir. Şöyle yaparız.
double value = 0.03303;
DecimalFormat df = new DecimalFormat("###.##;-###.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(value));
Çıktı olarak şunu alırım.
0.03
Formatlamada kullanılan işaretler ve Kullanım Şekilleri
1. Karakter #
Formatlamada en çok # işareti kullanılıyor. # kaç tane hane istendiğini belirtir. Sayı istenilen haneden fazlasına sahipse, yuvarlamaya tabi tutulur. Eğer istenilen haneden azına sahipse, # karakteri yerine bir şey yazılmaz!
1.1 İstenenden Az Küsurat Olması
Örnek
Küsurat hanesi 5 taneye kadar müsade edilmiş. Ancak elimizdeki para değeri sadece 3 haneye sahip. Dolayısıyla yazılacak sayılar yazılıyor, geri kalan haneler doldurulmuyor
BigDecimal money = BigDecimal ("123.234");
DecimalFormat df = new DecimalFormat("#.#####");
df.format(money);//123,234 verir
ÖrnekŞöyle yaparız.
DecimalFormat f = new DecimalFormat("#,###.##########");
System.out.println(f.format(100514.2f));
// Result: 100,514.203125
Örnek
Şöyle bir kod olsun.
DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(18.566666666666663));
Çıktı olarak şunu alırız.8.57
2. Karakter 0
0 kaç tane hane istendiğini belirtir. Sayı istenilen haneden fazlasına sahipse, yuvarlamaya tabi tutulur. Eğer istenilen haneden azına sahipse, 0 karakteri yerine 0 yazılır!
2.1 İstenenden Az Küsurat Olması
Örnek ver
2.2 İstenenden Fazla Küsurat Olması
Örnek
Şöyle yaparız
DecimalFormat f = new DecimalFormat("#,###.00");
System.out.println(f.format(100514.21351f));
// Result: 100,514.21
Hiç yorum yok:
Yorum Gönder