doubleの小数のフォーマットに問題があります。4.0などの二重値がある場合、小数点を4.00にフォーマットするにはどうすればよいですか?
doubleの小数のフォーマットに問題があります。4.0などの二重値がある場合、小数点を4.00にフォーマットするにはどうすればよいですか?
回答:
1つの方法は、NumberFormatを使用することです。
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
出力:
4.00
Java 8では、format
メソッドを使用できます。
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
floating
ポイント値に使用されます。2
小数点以下は、小数点以下の桁数を示します .
ほとんどのJavaバージョンでは、以下を使用できますDecimalFormat
。
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
String.formatを使用します。
String.format("%.2f", 4.52135);
ドキュメントに従って:
常に使用されるロケールは、によって返されるロケールです
Locale.getDefault()
。
String.formatを使用して、これを行うことができます。
double price = 52000;
String.format("$%,.2f", price);
これが@Vincentの回答と異なるコンマに注意してください
出力:
$52,000.00
書式設定に適したリソースは、件名の公式 Javaページです。
常に静的メソッドを使用できprintf from System.out
ます。対応するフォーマッタを実装します。これにより、他の例で必要となるヒープ領域が節約されます。
例:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
かなり大きなボーナスであるヒープ領域を節約しますが、この例は他のどの回答よりもはるかに扱いやすいと私は考えています。特に、ほとんどのプログラマはCのprintf関数を知っているためです(Javaは関数/メソッドをわずかに変更します)。
out
ですPrintStream
。
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
代替メソッドはsetMinimumFractionDigits
、NumberFormat
クラスのメソッドを使用することです。
ここでは基本的に、小数点の後に表示する数値の数を指定します。
したがって、指定された量が2であると仮定4.0
すると4.00
、
ただし、Double
入力に指定された量よりも多い場合は、指定された最小量が使用され、切り上げ/切り下げられた数字が1つ追加されます。
たとえば4.15465454
、最低2を指定すると、4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
これを行うには多くの方法があります。それらは以下のとおりです。
元の番号が以下のようになっているとします。
double number = 2354548.235;
NumberFormatの使用:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
String.formatを使用:
System.out.println(String.format("%,.2f", number));
DecimalFormatとパターンの使用:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
DecimalFormatとパターンの使用
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
すべての場合で、出力は次のようになります: 2354548.23
注:
丸め中にRoundingMode
フォーマッターを追加できます。以下は、いくつかの丸めモードです。
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
ここにインポートがあります:
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
以下のいずれかの方法を使用できます
使用している場合 java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
または
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
単純な文字列形式に変換したい場合
System.out.println(String.format("%.2f", 4.0));
上記のすべてのコードは4.00を印刷します
100%動作します。
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
最初のインポートNumberFormat
。次にこれを追加します:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
これにより、小数点以下2桁が表示され、通貨を扱う場合はドル記号が表示されます。
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
次のようにして行うことができます。
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
代わりに使用しているため機能しません00
これは古いトピックであることはわかっていますが、コンマではなくピリオドを使いたい場合は、結果をX、00として文字列に保存し、ピリオドを変更するだけでX.00を取得できます。
最も簡単な方法は、単にreplaceを使用することです。
String var = "X,00";
String newVar = var.replace(",",".");
出力は、必要なX.00になります。また、簡単にするために、一度にすべてを実行して、それをdouble変数に保存できます。
Double var = Double.parseDouble(("X,00").replace(",",".");
この返信は今のところ役に立たないことはわかっていますが、このフォーラムをチェックする誰かがこのような簡単な解決策を探しているかもしれません。
String.format()
またはを使用してみてくださいjava.text.Format
。