Java'da 2 ondalık basamaklı bir şamandıra nasıl yazdırılır?


Yanıtlar:


250

printfYöntemi şu şekilde kullanabilirsiniz :

System.out.printf("%.2f", val);

Kısaca, %.2fsözdizimi Java'ya biçim belirtecinin ( ) başlangıcından itibaren bir kayan nokta sayısının ( ) ondalık gösterimi valile değişkeninizi ( ) 2 ondalık basamakla ( .2) döndürmesini söyler .f%

Bunların yanı sıra kullanabileceğiniz başka dönüşüm karakterleri de vardır f:

  • d: ondalık tam sayı
  • o: sekizli tam sayı
  • e: bilimsel gösterimde kayan nokta

14
Lütfen String.format geçerli Yerel yapılandırmanıza bağlı olduğundan dikkatli olun, ayırıcı olarak nokta alamayabilirsiniz. Kullanmayı tercih etString.format(java.util.Locale.US,"%.2f", val);
— Gomino

1
@gomino Neden olmasın Locale.FRANCE?
— erickson

3
@gomino Kesinlikle. Öyleyse neden Fransız kullanıcılar için rakamlar koyuyorsunuz?
— erickson

1
Bu yorumu, her zaman ayırıcı olarak bir nokta olmasını bekleyen insanları uyarmak için bir hatırlatma olarak ekledim.
— Gomino

6
@gomino Bu mantıklı, ama ben zor kodlamayı "tercih" Locale.USçok ileri gidiyor düşünüyorum. Büyük / küçük harf katlama, sayı oluşturma vb Locale.ROOT. İçin "nötr" bir yerel ayarı kodlamanız gerekiyorsa, belirtin . Bu, insan kullanıcılar için değil, başka bir program tarafından tüketilecek metinler için uygun olacaktır. Bir kullanıcıya sunulan metin için, açıkça belirttikleri ya da varsayılan olduğu için yerel ayarlarına uyun.
— erickson

179

Kullanabilirsiniz DecimalFormat. Kullanmanın bir yolu:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

Bir diğeri #.##formatı kullanarak inşa etmektir .

Tüm biçimlendirme seçeneklerini biçimlendirme yöntemlerini çağırmaktan daha az okunabilir buluyorum, ancak bu bir tercih meselesi.


11
System.out.printf("%.2f", value)Sözdizimine ne oldu ? Hala buralarda mı?
— Anthony Forloney

6
bu. bu hala bir seçenek - cevabınızı geri alabilirsiniz;)
— Bozho

DecimalFormat'ı nasıl kullanacağımı henüz bilmediğim için bu benim seçeneğim gibi görünüyor :) Teşekkürler!
— via_point

Bir süredir kapsamlı Java çalışması yapmadım ve DecimalFormatcevapları görmeye devam ettiğimde hemen yanlış olduğumu düşündüm, ama bunu açıkladığınız için teşekkür ederim.
— Anthony Forloney

9
df.setMinimumFractionDigits(2);iki basamak zorlamak için ekle
— Terel

88

Kodunuzda bir değere ihtiyacınız varsa String.format () kullanmanızı öneririm String.

Örneğin String.format(), aşağıdaki şekilde kullanabilirsiniz:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);

14
"% .02f" ve "% .2f" aynı şeydir
— Borzh

40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

5
Merhaba Kevin, eğer 10.0000 girin, ben sadece 10 alıyorum. 10.00 görüntülemek istersem nasıl yapabilirim?
— Mdhar9e

2
@ Mdhar9e useDecimalFormat df = new DecimalFormat("0.00");
— K.Sopheak

16
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24

4
Yerel ayara bağlı olarak virgül alabilirsiniz. Nokta ayırıcı istiyorsanız, şunu kullanın: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
— DPM

10
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

Çıktı 22.35. 3 ondalık basamağa ihtiyacınız varsa "% .3f" olarak değiştirin.



9

Basit bir hile, değişkeninizin daha kısa bir versiyonunu, örneğin 100yuvarlayarak ve 100.0tekrar bölerek üretmektir . Bu şekilde 2 ondalık basamaklı bir değişken oluşturursunuz :

double new_variable = Math.round(old_variable*100) / 100.0;

Bu "ucuz numara" benim için her zaman yeterince iyiydi ve herhangi bir dilde çalışıyor (ben bir Java insanı değilim, sadece öğreniyorum).


1
Bu yanlıştır, 100'e bölündükten sonra birçok sayı kayan sayı temsilinde tekrarlanır. Bu nedenle iki ondalık basamak olmaz.
— matt

8

Aşağıda, sonunda kendini değiştiren bu hızlı kodları kullanabilirsiniz. Noktadan sonra ne kadar sıfır ifade ettiğini ekleyin

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

Y1 değişkeni daha önce 0.123456789'a eşitti . Koddan sonra sadece 0.12'ye dönüşür .


2
Bu noktadan önce 0 göstermez. DecimalFormat olmalıdır df = yeni DecimalFormat ("0.00");
— Ridhuvarshan

Kesinlikle! DecimalFormat ("0.00") da çalışır! Harika bir yer.
— Bay

6

DecimalFormat'a bakın

İşte öğreticiden bir örnek:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

"###. ##" gibi bir desen seçerseniz, iki ondalık basamak elde edersiniz ve bence değerler yuvarlanır. Tam olarak istediğiniz biçimi elde etmek için bağlantıya bakmak isteyeceksiniz (örn. Sondaki sıfırları isteyip istemediğiniz)


5

Java'da 2 ondalık basamağı olan bir kayan noktalı veri çıktısını nasıl görüntüleyebileceğinize ilişkin kod aşağıdadır:

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98

3

Tamam - yüzmek için str.

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

Çıktı:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)

1

gösteri için küçük basit bir program:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}

1

Sadece String str = System.out.printf("%.2f", val).replace(",", ".");kullanıcının Yerel ayarından bağımsız olarak, her zaman bir "." ondalık ayırıcı olarak. Daha sonra gibi bir tür dönüşüm yaparsanız programınızın çökmesini istemiyorsanız bu bir zorunluluktur.float f = Float.parseFloat(str);


1

Beni bir saat veya daha fazla tutan bir sorun, DecimalFormat- Çift ve şamandıra girdileri farklı ele alır. Hatta değişiklik RoundingMode yardım etmedi. Uzman değilim ama bunun benim gibi birine yardımcı olabileceğini düşündüm. Math.roundBunun yerine kullanarak sona erdi . Aşağıya bakınız:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

Çıktı:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77

0

Bunu dene:-

private static String getDecimalFormat(double value) {

    String getValue = String.valueOf(value).split("[.]")[1];

      if (getValue.length() == 1) {
          return String.valueOf(value).split("[.]")[0] +
                "."+ getValue.substring(0, 1) + 
                String.format("%0"+1+"d", 0);
       } else {
          return String.valueOf(value).split("[.]")[0]
            +"." + getValue.substring(0, 2);
      }


 }

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.