Yanıtlar:
printf
Yöntemi şu şekilde kullanabilirsiniz :
System.out.printf("%.2f", val);
Kısaca, %.2f
sözdizimi Java'ya biçim belirtecinin ( ) başlangıcından itibaren bir kayan nokta sayısının ( ) ondalık gösterimi val
ile 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 noktaLocale.FRANCE
?
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.
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.
System.out.printf("%.2f", value)
Sözdizimine ne oldu ? Hala buralarda mı?
DecimalFormat
cevapları görmeye devam ettiğimde hemen yanlış olduğumu düşündüm, ama bunu açıkladığınız için teşekkür ederim.
df.setMinimumFractionDigits(2);
iki basamak zorlamak için ekle
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);
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
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.
Birçok insan bahsetti DecimalFormat
. Ancak printf
, Java'nın yeni bir sürümüne sahipseniz de kullanabilirsiniz :
System.out.printf("%1.2f", 3.14159D);
Printf format dizesi hakkında daha fazla bilgi için Formatter'daki dokümanlara bakın .
Basit bir hile, değişkeninizin daha kısa bir versiyonunu, örneğin 100
yuvarlayarak ve 100.0
tekrar 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).
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 .
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)
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
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)
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);
}
}
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);
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.round
Bunun 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
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);
}
}
String.format(java.util.Locale.US,"%.2f", val);