gpt4 book ai didi

java - 转换依赖 BigDecimal 语言环境的输入?

转载 作者:行者123 更新时间:2023-11-30 07:27:47 25 4
gpt4 key购买 nike

我正在尝试将值的输入字段保存到 BigDecimal。哪个已经有效。但是如果我输入非语言环境类型的小数分隔符,它会产生奇怪的结果。

例如:

class Payment {
BigDecimal amount;
}

<p:inputText id="amount" value="#{payment.amount}">
<f:convertNumber locale="en"/>
</p:inputText>
<h:outputText value="#{payment.amount}" />

如果我输入 10,10我得到:1,010.00

所以取值为1010我该如何解决这个问题?我在这里做错了什么?

类型

最佳答案

在解析英语语言环境数字时,逗号并不重要。 Java 的原始 Number 类型不会保留任何格式信息 - 这只是表示数据。

带有 NumberConverterinputText 的逻辑是这样的:

NumberFormat formatter = NumberFormat.getNumberInstance(Locale.ENGLISH);
// NumberConverter turns input string into Number
Number number = formatter.parse("10,10");
// Expression language coerces the Number to BigDecimal
BigDecimal decimal = BigDecimal.valueOf(number.doubleValue());
// On output back to browser:
String output = formatter.format(decimal);
System.out.println(output);

outputText 没有转换器,因此只会在其值绑定(bind)(BigDecimal)上调用 toString()。)

我希望结果分别为 1,0101010.0

NumberConverter 的行为记录在 javadoc 中. EL 类型强制转换的规则记录在 JSR 245 中:

Coerce A to Number type N

  • If A is Number, coerce quietly to type N using the following algorithm:
    • If N is BigDecimal,
      • If A is a BigInteger, return new BigDecimal(A)
      • Otherwise, return new BigDecimal(A.doubleValue())

如果您想使用用户的浏览器区域设置来解释数字格式,请删除区域设置属性。如果您希望转换器将句点和逗号都视为小数点分隔符,请提供您自己的 Converter实现。

关于java - 转换依赖 BigDecimal 语言环境的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9485514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com