在Play 2模板中格式化double的正确方法是什么

时间:2013-06-02 00:51:22

标签: scala playframework-2.0

这是我在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解决方案。

3 个答案:

答案 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>