Tin*_*iny 3 jsf bigdecimal jsf-2.2
例如,下面给出了一个JSF托管bean.
@ManagedBean
@ViewScoped
public final class Bean implements Serializable {
private BigDecimal price; //Getter only.
private BigDecimal currencyRate; //Getter only.
private static final long serialVersionUID = 1L;
@PostConstruct
private void init() {
price=new BigDecimal(5678);
currencyRate=new BigDecimal(0.016622);
}
}
Run Code Online (Sandbox Code Playgroud)
乘法price和currencyRate可以显示<h:outputText>.
<h:outputText value="#{bean.price * bean.currencyRate}"/>
Run Code Online (Sandbox Code Playgroud)
这个乘法产量BigDecimal或它只是一个double值吗?
换句话说,这相当于以下几点吗?
<h:outputText value="#{bean.price.multiply(bean.currencyRate)}"/>
Run Code Online (Sandbox Code Playgroud)
它显示94.3797160000000077070825277303356415359303355216979980468750在两种情况下.
如果有一个转换器显示指定的十进制数字,例如,如下所示,那该怎么办?
<h:outputText value="#{bean.price * bean.currencyRate}"
converter="#{bigDecimalConverter}"/>
Run Code Online (Sandbox Code Playgroud)
BigDecimal无论如何,我希望这些表达式的结果.
从El 3.0规范pdf(第13页 - 第1.7.1节):
算术运算符的评估将在以下部分中介绍.A和B是子表达式的评估.
1.7.1二元运算符 - A {+, - ,*} B.
- 如果是A和B
null,则返回(Long)0- 如果A或B是a
BigDecimal,则强制执行以下操作BigDecimal:
- 如果运算符为+,则返回
A.add(B)- 如果操作符是 - ,则返回
A.subtract(B)- 如果运算符为*,则返回
A.multiply(B)- 如果A或B是a
Float,Double或String包含.,e或E:
- 如果A或B是
BigInteger,则强制A和BBigDecimal并应用运算符.- 否则,强制A和B
Double并应用运算符- 如果A或B是
BigInteger,则强制执行以下操作BigInteger:
- 如果运算符为+,则返回
A.add(B)- 如果操作符是 - ,则返回
A.subtract(B)- 如果运算符为*,则返回
A.multiply(B)- 否则强制A和B
Long并应用运算符- 如果运算符导致异常,则出错
因此,是的EL表达式,#{bean.price * bean.currencyRate}"如<h:outputText>,
<h:outputText value="#{bean.price * bean.currencyRate}"/>
Run Code Online (Sandbox Code Playgroud)
被评估为a java.math.BigDecimal,因为两者bean.price和bean.currencyRate相应的支持bean都是类型的java.math.BigDecimal- bean.price.multiply(bean.currencyRate)是在内部执行的.
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |