私はVBを作成しようとしています。既存のJava関数と同等のネット。この関数内では、文字列は小数点以下の桁数になるように書式設定されていますが、関数が正確に何をしているのか分かりません。
forループは、指定された min/max
。パラメータに応じて dec2disp
数値は、特定の10進数を示すように調整されます。
Javaコードは次のとおりです。
for( double d = min; d <= max; d+=inc ) {
if((m_flags&dispZeroAsOff)!=0 && d==0){
vList.add(m_offString);
}else{
String fmt=String.format("%%.%df", dec2disp);
String temp = String.format(fmt, d);
vList.add(temp + unit);
}
}
私を混乱させる行は String.format("%%.%df", dec2disp);
。私は %d
そして %f
どこでも何も見つけることができません %df
.
回答:
回答№1は1文字列fmt = String.format( "%%。%df"、dec2disp);
この行は、dec2disp( "%%。%df"の "%d"をfmt = "%2f"のようなものに置き換える)に要求された小数点以下桁数の有効な書式指定子を生成します。
String temp = String.format(fmt、d);
fmtに格納されている書式指定子を使用して、dの値を正しい小数点以下の桁数で表示します。
回答№2については2
%dと%fの説明が見つかりましたが、何も見つかりません どこでも%df。
それは、 DecimalFormat
.
java.lang.Object
↳ java.text.Format
↳ java.text.NumberFormat
↳ java.text.DecimalFormat
NumberFormatの具象サブクラス10進数。それ 解析することを可能にするために設計されたさまざまな機能を備えています。 書式番号は、西暦、アラビア語、 またはインドの数字。それはまた、数の異なる風味をサポートし、 整数(「123」)、固定小数点数(「123.4」)、科学 表記法(「1.23E4」)、パーセンテージ(「12%」)、および通貨額 (「$ 123」)。これらのフレーバーはすべて簡単にローカライズできます。
参照 - DecimalFormat.
注意:
異なる文字列フォーマッタに興味があるなら、最終クラスに従います フォーマッタ.
java.lang.Object
↳ java.util.Formatter
回答№3の場合は0
%d
書式設定に関連する文字列パターンの唯一の部分です。ザ f
は文字リテラルで、ドットも二重パーセント記号もリテラルですが、エスケープされています。
結局、このパターンは実際に10進数をフォーマットしません。それを証明するための簡単なテストです:
for (int i = 0; i < 10; i++) {
System.out.println(String.format("%%.%df", i));
}
出力:
%.0f
%.1f
%.2f
%.3f
%.4f
%.5f
%.6f
%.7f
%.8f
%.9f
もし i
浮動小数点数または倍数だった場合、それは IllegalFormatConversionException
、なぜなら、 %d
整数にしか適用できません。