[解決済み] DecimalFormat を使用してフォーマットすると、例外 - "Cannot format given Object as a Number" がスローされます。
質問
これは繰り返しの質問のように見えるかもしれませんが、私は以下のすべてのリンクで試してみましたが、適切な答えを得ることができません。
与えられたオブジェクトを数値としてフォーマットできない コンボボックス
しかし、何が間違っているのかがわからない。以下は私のコードです。
DecimalFormat twoDForm = new DecimalFormat("#.##");
double externalmark = 1.86;
double internalmark = 4.0;
System.out.println(String.valueOf((externalmark*3+internalmark*1)/4));
String val = String.valueOf((externalmark*3+internalmark*1)/4);
String wgpa1=twoDForm.format(val); // gives exception
String wgpa2=twoDForm.format((externalmark*3+internalmark*1)/4)); // works fine
System.out.println(wgpa1);
は
format
メソッドは Object 型の引数を取るので、String オブジェクトを渡したところ、例外が発生しました。
スレッド "main" java.lang.IllegalArgumentException で例外が発生しました。できません 指定されたオブジェクトを数値としてフォーマットしてください。
しかし、引数としてdouble値を与えると、プログラムは正常に動作します。しかし、もしメソッドが
Object
を渡すと例外が発生するのはなぜですか?
String
を渡すと例外が発生し
double
?
解決方法は?
その
format()
メソッドの
DecimalFormat
がオーバーロードされます。
動作例では、.NETを起動しています。
public final String format(double number)
また、失敗した場合は、.NET Frameworkを起動することになります。
public final String format (Object obj)
最初のメソッドは、非常に特殊な引数を取ります。このメソッドでは
double
.
これは2つ目のケースとは異なり、受け入れられる型は非常に広範囲です :
Object
で、渡された型のチェックは実行時に行われます。
でない引数を与えることで
double
でなく
String
の場合、呼び出されるメソッドは2番目のものです。
このメソッドでは、(1) と (2) の間にある
format(Object number, StringBuffer toAppendTo, FieldPosition pos)
メソッドに期待します。
number
のインスタンスである引数を返します。
Number
クラス(
Short
,
Long
, ...
Double
):
@Override
public final StringBuffer format(Object number,
StringBuffer toAppendTo,
FieldPosition pos) {
if (number instanceof Long ||
number instanceof Integer ||
number instanceof Short ||
number instanceof Byte ||
number instanceof AtomicInteger ||
number instanceof AtomicLong ||
(number instanceof BigInteger && ((BigInteger)number).bitLength () < 64)) {
return format(((Number)number).longValue(), toAppendTo, pos);
} else if (number instanceof BigDecimal) {
return format((BigDecimal)number, toAppendTo, pos);
} else if (number instanceof BigInteger) {
return format((BigInteger)number, toAppendTo, pos);
} else if (number instanceof Number) {
return format(((Number)number).doubleValue(), toAppendTo, pos);
} else {
throw new IllegalArgumentException("Cannot format given Object as a Number");
}
}
を渡したのですが、これは
String
のインスタンスを作成します。
この問題を解決するには
double
成功した場合のようにプリミティブを変換するか、あるいは
String
のインスタンスに変換します。
Number
というように
Double
と
Double.valueOf(yourString)
.
私は、最初の方法(
double
をすでに使用しているコードでは、この方法がより自然です。
double
プリミティブを使用します。
2つ目は
String
から
Double
.
関連
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】Android Studioでタスク :app:compileDebugJavaWithJavac の実行に失敗しました。
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】javaで無効な文字定数
-
[解決済み】CreateProcess error=2, The system cannot find file specified.
-
[解決済み] 浮動小数点以下の0を削除して文字列に変換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】破損したjarファイル
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] "java.nio.charset.MalformedInputException" を避けるために、すべての包括的なCharset。入力の長さ= 1"?