在 Scala Java Play 框架中格式化没有小数的双精度并为数千添加逗号

Posted

技术标签:

【中文标题】在 Scala Java Play 框架中格式化没有小数的双精度并为数千添加逗号【英文标题】:Format a double without decimals & adding commas for thousands in Scala Java Play framework 【发布时间】:2015-06-28 23:38:27 【问题描述】:

我有双打,例如:

87654783927493.00

23648.00

我想将它们输出为:

87,654,783,927,493

23,648


我找到了以下解决方案:

@("%,.2f".format(myDoubleHere).replace(".00",""))

这是在以下人员的帮助下完成的:

how to format a number/date in play 2.0 template?

What is the proper way to format a double in a Play 2 template


我想用更干净的东西代替这个无耻的解决方案。使用.replace() 方法去除这些小数确实不漂亮。

【问题讨论】:

【参考方案1】:

%,.2f 中的“2”表示要在格式中使用的小数位数。你可以改用%,.0f

"%,.0f".format(myDoubleHere)  

您可以在文档here 中阅读有关 Java 格式的更多信息。您的另一个选择是四舍五入到Int,然后使用%,d

"%,d".format(math.round(myDoubleHere))

这可能会更好地处理一些边缘情况,具体取决于您的用例(例如,5.9 将变为 6 而不是 5)。

【讨论】:

【参考方案2】:

使用 Java DecimalFormat 我们有这个

val df = new java.text.DecimalFormat("###,###");
df: java.text.DecimalFormat = java.text.DecimalFormat@674dc

等等

scala> df.format(87654783927493.00)
res: String = 87,654,783,927,493

scala> df.format(23648.00)
res: String = 23,648

【讨论】:

【参考方案3】:

对于整数和浮点数,这在常规 Scala 中适用于我:

// get java number formatters
val dformatter = java.text.NumberFormat.getIntegerInstance
val fformatter = java.text.NumberFormat.getInstance

val deciNum = 987654321
val floatNum = 12345678.01
printf("deciNum: %s\n",dformatter.format(deciNum))
printf("floatNum: %s\n",fformatter.format(floatNum))

输出是:

deciNum: 987,654,321
floatNum: 12,345,678.01

【讨论】:

【参考方案4】:

最好通过简单的例子来理解,使用%,d

scala> f"Correctly Formatted output using 'f': $Int.MaxValue%,d"
val res30: String = Correctly Formatted output using 'f': 2,147,483,647

scala> s"Incorrectly Formatted output using 's': $Int.MaxValue%,d"
val res31: String = Incorrectly Formatted output using 's': 2147483647%,d

【讨论】:

以上是关于在 Scala Java Play 框架中格式化没有小数的双精度并为数千添加逗号的主要内容,如果未能解决你的问题,请参考以下文章

play框架之简介

如何解析JSON使用Play框架

在 Play 中查看 scala html 模板时出错

如何在视图页面中使用Play框架和Scala显示图像

Scala play框架中@Singleton的使用

访问控制、Scala 中的权利、Play 框架