2012-05-11 16 views
0

数字の書式でベクターに商品の価格を書きたいと思っていました。例外このセクション10進数を通貨としてフォーマットする方法。

obj.price=Integer.parseInt(nf.format(3040000)); 
obj.price=Integer.parseInt(nf.format(6000500)); 
obj.price=Integer.parseInt(nf.format(3050000)); 
obj.price=Integer.parseInt(nf.format(2948000)); 

で処理 JSPページ

を発生しました。ここではそれは

org.apache.jasper.JasperExceptionがが言っ

<%! 
     class product 
     { 
      public String name; 
      public int price; 
      public String image; 

      public product() 
      { 
      } 
     } 
    %> 
<% 
    NumberFormat nf = NumberFormat.getCurrencyInstance(); 
    DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
    dfs.setCurrencySymbol("$ "); 
    dfs.setGroupingSeparator('.'); 
    dfs.setMonetaryDecimalSeparator('.'); 
    ((DecimalFormat) nf).setDecimalFormatSymbols(dfs); 


    Vector<product> vec = new Vector<product>(); 
    gallery obj; 

    obj=new product(); 
    obj.nama="Dark Chocolate"; 
    obj.price=Integer.parseInt(nf.format(3040000)); 
    obj.image="Image/Dark chocolate.jpg"; 
    vec.add(obj); 

    obj = new product(); 
    obj.nama="Woodhouse Chocolates"; 
    obj.price=Integer.parseInt(nf.format(6000500)); 
    obj.image="Image/woodhouse_chocolates.jpg"; 
    vec.add(obj); 

    obj = new product(); 
    obj.name="Semisweet Chocolate"; 
    obj.price=Integer.parseInt(nf.format(3050000)); 
    obj.image="Image/Semisweet chocolate.jpg"; 
    vec.add(obj); 

    obj = new product(); 
    obj.name="White Chocolate"; 
    obj.price=Integer.parseInt(nf.format(2948000)); 
    obj.image="Image/White chocolate.jpg"; 
    vec.add(obj); 

%> 

私のコードです私の間違いはどこですか?誰か助けてくれますか?

+0

これらの数字(3040000,6000500,3050000,29848000)は何を表していますか?そのドル価値はありますか? 300万ドルのチョコレート? –

答えて

1

try/catchでコードをラップし、例外を出力します。 いっそ - Javaクラスにコードを移動し、あなたがIDEですぐにそれを実行することができるようにユニットテストを書くあなたはそれを解析しようとしているランダムTHEN文字の束と数をフォーマットしようとしている

2

整数に変換する。

これは動作しません。

An Integerは、小数部と空白文字がない整数です。

0-9(またはマイナス記号)以外の文字は、整数として解析しようとするとNumberFormatExceptionをスローします。

...(やはりiangreenのように)コードをtryブロックに入れる必要があります。 (IDEまたはコンソールプログラム)

... (のようなiangreenが言う)あなたがテストできる場所が簡単にどこかにこのコードを移動することができます/デバッグ、それはLOT容易になります。

... および大文字で始まるクラス名を常に使用してください。


商品を作成する前に価格をフォーマットしようとしていることを考えれば、商品クラスにストリングとして保存する必要があります。 またはをダブルまたはフロートとして保存し、別の時間にフォーマットすることができます。

2

これはまったく意味がありません。整数を人間が読める形式にフォーマットしようとしていますが、それを構文解析してintに戻すと、理論的にはすべての書式が失われてしまいます。 intはフォーマットを保存できません。それはStringに保存する必要があります。しかし、あなたがそれをやっている瞬間は間違っています、それはプレゼンテーション中ではなく、前処理中に行われるべきです。フォーマットにはStringがぶら下がってはいけません。

使用JSTL<fmt:formatNumber>です。

<fmt:formatNumber value="${product.price}" type="currency" currencyCode="USD" /> 

これは、標準のUSDの形式でフォーマットして自動的に$通貨記号の前に付けます。

また、intからBigDecimalに変更すると、実際の価格形式について話すことができません。 intに分数を保存して表示することはできません。

関連する問題