0

I wanted to write price for the product in vector using number format. Here is my code

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

%>

It said

org.apache.jasper.JasperException: An exception occurred processing JSP page

at this section

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

Where's my the mistake? Could anyone help me?

4

3 回答 3

2

您正在尝试用一堆随机字符格式化一个数字,然后尝试将其解析为整数。

那不管用。

整数是没有小数部分和花哨字符的整数。

如果您尝试将其解析为整数,则 0-9(或负号)以外的任何字符都将引发 NumberFormatException。

...并且(就像iangreen说的)你应该把你的代码放在一个 try 块中。

...并且(就像iangreen说的那样)您可以轻松地将此代码移动到其他可以更轻松地对其进行测试/调试的地方 IDE 或控制台程序)。

...并且您应该始终以大写字母开头类名。


鉴于您在创建产品之前尝试格式化价格,您应该将它们作为字符串存储在您的产品类中。 或者您可以将它们存储为双精度或浮点数并在其他时间格式化它们。

于 2012-05-11T02:13:57.887 回答
2

这完全没有意义。您正在尝试将整数格式化为人类可读的格式String,然后将其解析回int理论上会导致所有格式丢失。int无法存储格式。它应该存储在String. 但是,当你这样做是错误的时候,它应该在演示期间完成,而不是在预处理期间。您不应该String在格式上徘徊。

使用JSTL <fmt:formatNumber>

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

它将以标准美元格式对其进行格式化,并自动为$货币符号添加前缀。

我也会改变intBigDecimal否则你不能谈论真正的价格格式。您不能在int.

于 2012-05-11T12:38:17.457 回答
1

将您的代码包装在 try/catch 中并打印出异常。更好的是 - 将您的代码移动到一个 java 类中并编写一个单元测试,以便您可以在 IDE 中快速执行它

于 2012-05-11T02:12:33.647 回答