2012-05-11 5 views
0

Я хотел написать цену для продукта в векторе, используя формат чисел. Вот мой кодКак форматировать десятичное число в качестве валюты.

<%! 
     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); 

%> 

Он сказал

org.apache.jasper.JasperException: произошло исключение обработки JSP страницы

в этом разделе

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)); 

Где моя ошибка? Может ли кто-нибудь мне помочь?

+0

Что представляют собой эти цифры (3040000, 6000500, 3050000, 2948000)? Являются ли эти долларовые ценности? Например, шоколад в три миллиона долларов? –

ответ

1

оберните свой код в try/catch и распечатайте исключение. еще лучше - переместить код в класс Java и написать модульный тест, так что вы можете выполнить его быстро в IDE

2

Вы пытаетесь форматировать число с кучей случайных символов THEN пытается разобрать его в Целое число.

Это не сработает.

An Integer - это целое число, которое не имеет десятичной части и не имеет причудливых символов.

Любой символ, отличный от 0-9 (или отрицательный знак), выдает исключение NumberFormatException, если вы попытаетесь разобрать его как целое.

... и (например, iangreen), вы должны поместить свой код в блок try.

... И (как iangreen говорит) вы можете легко перенести этот код куда-нибудь еще, где вы можете проверить/отладить его LOT проще (IDE или консольная программа).

... И Вы должны всегда начинать имена классов с большой буквы.


Учитывая тот факт, что вы пытаетесь форматировать цены, прежде чем создавать свои продукты, вы должны хранить их в своем классе продукт в виде строк. ИЛИ вы могли бы хранить их в виде парных или поплавков и форматировать их в другое время.

2

Это совершенно не имеет смысла. Вы пытаетесь отформатировать целое число в человекообразном String, а затем разобрать его до int, что теоретически приведет к потере всего форматирования. int не может сохранить формат. Он должен храниться в String. Но, когда вы делаете это неправильно, это должно быть сделано во время презентации, а не во время предварительной обработки. У вас не должно быть String s.

JSTL<fmt:formatNumber>.

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

Это будет форматировать его в стандартном формате USD и автомагически префикс символа в $ валюты.

Я также изменил бы int на BigDecimal, иначе вы не можете говорить о реальном ценовом формате. Вы не можете хранить и представлять фракции в int.

Смежные вопросы