这是我在Play 2模板中的缩写代码......
@(variable: com.mypackage.Variable)
<div class='statsbody'>
<div class='statsform'>
<label>Average:</label>
<span>@"%.2f".format(variable.getAverage())</span>
</div>
</div>
我收到编译错误:
`identifier' expected but `"' found
我从this question得到了上面的想法,它说明了如何在scala命令提示符下执行此操作,这很棒,但在模板中不起作用。
getAverage()
方法属于我正在使用的外部Java包,它返回原始double
。这一切都很好,没有格式化我可以愉快地显示正确的数字。
我尝试了各种替代方法,包括使用静态Java String格式化方法......
@String.format("%.2f", variable.getAverage())
...给了
Overloaded method value [format] cannot be applied to (String, Double)
所以我的问题是,在Play 2模板中格式化双精度的正确方法是什么?我知道我可以使用Javascript,但我想知道是否有Play / Scala解决方案。
答案 0 :(得分:11)
使用括号:
@("%.2f".format(variable.getAverage()))
或:
@{
"%.2f".format(variable.getAverage())
//more scala code
}
允许您在模板中编写多语句scala代码。
答案 1 :(得分:0)
我找到了 的答案,但它没有直接解决手头的问题。如果我将String.format
打包成这样的double
,我可以让java.lang.Double
代码生效...
@String.format("%.2f", new java.lang.Double(variable.getAverage()))
这解决了我现在的问题,但并没有真正回答这个问题。必须有Scala / Play解决方案......一定不能吗?
答案 2 :(得分:0)
我发现只有正确更改用户语言并将格式应用于数字的解决方案是:
在控制器中:
public Result lang(String lang) {
changeLang(lang);
Logger.debug("Language change request: " + lang);
return redirect(routes.Dashboard.dashboard());
}
在模板中我们使用以下内容:
<td>@("%.2f".formatLocal(lang().toLocale(), variable.getAverage()))</td>