1

BigDecimal を指定しようとしているカスタム taglib がありますが、スケールが保持されません。BigDecimal が double に変換されてから、BigDecimal に戻されるようです。これは WebSphere のバグですか? または私は何かを逃していますか?

私のコントローラー(Springを使用しています):

@Controller
@RequestMapping("/BigDecimalTest")
public class BigDecimalTestController {

    @RequestMapping
    public String display(final Map<String, Object> model) {
        model.put("bigDecimal", new BigDecimal("126.58"));
        return "bigDecimalTest";
    }

}

私のJSP:

<%@taglib uri="/custom-taglibs/bigDecimal.tld" prefix="bd"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>BigDecimal Test</title>
</head>
<body>
<bd:display value="${bigDecimal}"/>
</body>
</html>

私のtaglib記述子:

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
  <description>BigDecimal test</description>
  <tlib-version>1.0</tlib-version>
  <short-name>bd</short-name>
  <tag>
    <description>Display informations about a BigDecimal</description>
    <name>display</name>
    <tag-class>BigDecimalDisplay</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <name>value</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.math.BigDecimal</type>
    </attribute>
  </tag>
</taglib>

私のタグクラス:

public class BigDecimalDisplay extends TagSupport {

    private static final long serialVersionUID = 2049900195699675393L;

    private BigDecimal value;

    public void setValue(final BigDecimal value) {
        this.value = value;
    }

    @Override
    public int doStartTag() throws JspException {
        final JspWriter out = pageContext.getOut();
        try {
            out.print("<div>");
            out.print("<div>Value: ");
            out.print(value.toPlainString());
            out.print("</div>");
            out.print("<div>Scale: ");
            out.print(value.scale());
            out.print("</div>");
            out.print("</div>");
        } catch (final IOException e) {
            throw new JspException(e);
        }
        return SKIP_BODY;
    }

}

期待される出力:

値: 126.58
スケール: 2

実際の出力:

値: 126.5799999999999982946974341757595539093017578125
スケール: 46

編集: Spring を使用せずにこの問題を再現できました。obourgain は Jetty で再現できなかったため、実際には WebSphere のバグのようです。

編集:これは IBM バグPM48569でしょうか?

4

1 に答える 1

0

氏。必要な小数の数がわかっている場合は、おそらくパターンのようなものを作成できます。リンク: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html これがお役に立てば幸いです。Gr. ジリアン

于 2013-05-03T09:32:05.733 に答える