Yanıtlar:
String.format("%1$,.2f", myDouble);
String.format otomatik olarak varsayılan yerel ayarı kullanır.
%1, %2vb. çıktıları girdi argümanlarınızın dizinine göre yeniden sıralamak için kullanılabilir. Bkz bu . Dizini atlayabilirsiniz ve varsayılan sipariş biçimlendirici tarafından kabul edilir.
String.format("%4.3f" , x) ;
Bu, ans'ta toplam 4 basamağa ihtiyacımız olduğu anlamına gelir; bunların 3'ü ondalık basamaktan sonra olmalıdır. Ve f, çiftin format belirleyicisidir. x, bulmak istediğimiz değişkeni ifade eder. Benim için çalıştı. . .
String.format("%014.3f" , 58.656565)-> 0000000058,657: Toplam 14 sembol: 8 sıfır ve 5 sayı ve 1 virgül. Yani bu durumda sayı , sonuç dizesindeki 14 toplam sembol sayısı (ekstralar sıfır ile değiştirilir, onsuz gidebilir, sonra boşlukla değiştirilir) anlamına gelir . Görevin burada tamamen bağımsızdır. .3
String.format("%014.3f" , 58.656565)-> 58,657. Bunu tercih ediyorum çünkü tercih .3fbölüme gidiyor : önce sayıyı 3 ondalık basamakla yazdırıyor ve sonra kalan semboller varsa boşluklar (veya sıfırlar / herhangi bir şey) yazdırıyor. Bu durumda sayı 2 + 3 + 1 = 6 sembol ve sadece 4 basmak istedik, bu yüzden kesinlikle fazladan boşluk yok.
Manuel olarak ayarlanmış sembollerle biçimlendirmek istiyorsanız, bunu kullanın:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25
Yerel ayarlara dayalı biçimlendirme tercih edilir.
bu bağlantıdan çıkarılan kod ;
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " +
currentLocale.toString());
Bu örnekteki çıktı, aynı sayı biçiminin Yerel Ayarla nasıl değiştiğini gösterir:
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
public class MainClass {
public static void main(String args[]) {
System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);
System.out.printf("Default floating-point format: %f\n", 1234567.123);
System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);
System.out.printf("Line-up positive and negative values:\n");
System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
}
}
Ve çıktısını alın:
3 (3) +3 00003
Varsayılan kayan noktalı biçim: 1234567,123000
Virgül içeren
kayan nokta: 1.234.567,123000
Negatif kayan noktalı varsayılan: -1.234.567,123000 Negatif kayan noktalı seçenek: (1.234.567, 123000)Sıralı pozitif ve negatif değerler:
1.234.567,12
-1.234.567,12
Bunu yapmanın birçok yolu var. Bunlar feryat verilir:
Orijinal numaranızın aşağıda verildiğini varsayalım: çift sayı = 2354548.235;
Kullanma NumberFormatve Yuvarlama modu
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
String fString = decimalFormatter.format(number);
System.out.println(fString);
Dize biçimlendiricisini kullanma
System.out.println(String.format("%1$,.2f", number));
Her durumda çıktı : 2354548.24
Not :
Yuvarlama sırasında RoundingModebiçimlendiricinize ekleyebilirsiniz . Aşağıda verilen bazı Yuvarlama modları verilmiştir:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
İşte ithalat :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
kullanım DecimalFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(myDouble);
System.out.println(fString);
String.format(Locale.GERMAN, "%1$,.2f", myDouble);