当前位置: 首页 > 知识库问答 >
问题:

在Scala中使用f字符串插值器强制指定十进制分隔符

彭鸿文
2023-03-14

我试图组成一个格式化的字符串,应该看起来像这样:

一瓶伏特加要x.yz卢布。

其中x.yz是四舍五入为2个小数点的任意双精度值。

为了实现这一点,我使用字符串插值和printf语法:

val cost = 2.56
val str = f"A bottle of vodka costs $cost%.2f rubles."

不幸的是,在一台使用俄语语言环境的机器上,上面的代码片段产生的结果与我想要实现的结果略有不同:

str:String=一瓶伏特加要2.56卢布。

这是可以理解的(f interpolator使用的Java格式化程序应用了特定于语言环境的十进制分隔符,如下所述),但我仍然希望使用小数点而不是逗号。

我知道一种可能的解决方法——使用显式设置语言环境的formatLocal()方法:

 val str = "A bottle of vodka costs %.2f  rubles.".formatLocal(java.util.Locale.US, cost)

但我并不觉得这是一种特别夸张的做事方式。

所以我的问题是:有没有可能只使用f插值来格式化一个带有特定十进制分隔符的字符串,而不使用任何无关的方法调用

共有1个答案

伍玮
2023-03-14

目前f插值器不支持区域设置或自定义分隔符(请参见macro_StringInterpolation_f.scala/FastTrack.scala)。

 类似资料:
  • 有没有一个简单的方法用Python f字符串来固定小数点后的位数?(特别是f字符串,而不是其他字符串格式选项,如。格式或%) 例如,假设我想在小数点后显示2位数字。 我该怎么做?这么说吧

  • 问题内容: 我需要用点替换逗号,然后我需要将值设为数字。所以我这样写: 但是然后我想转换该值,然后出现错误: 问题答案: 该函数使用会话的NLS_NUMERIC_CHARACTERS设置来决定如何解释逗号和句点。如果您知道字符串始终以逗号作为小数点分隔符,则可以使用可选的第三个参数将其覆盖为调用的一部分;尽管这确实意味着您必须指定格式模型: 您不需要单独的步骤。 您也可以使用更改会话的设置,但可能

  • 我想在我的Android应用程序中显示一些坐标。我从后端收到两个双精度值(和,以十进制度数表示)。 示例数据: 现在我在我的类文件中填充我的文本视图: 我的xml资源文件包含以下内容: 它显示: 因为我住在荷兰,所以它的格式是相应的。 看见https://developer.android.com/reference/java/util/Formatter 数字定位算法 如果存在十进制分隔符,则替

  • 我用JSON格式存储了很多颜色。我使用rootbeer via gulp将它们转换为sass映射,可以由SCSS处理: 至 我可以很好地使用语法中的颜色,但一旦应用了任何颜色函数,如,编译器就会失败,因为颜色类型完全消失了。 即使使用也不允许sass将其视为字符串,但它需要是一种颜色。 我的问题是,是否有任何方法可以让我强制编译器将此作为一种颜色来处理呢?另一种方法是省略所有内置颜色函数的使用。

  • 我是android和java编程的新手,所以请原谅我,如果这是一个简单的问题。我的问题是在小数点后添加%。我会得到双倍的值,不知道小数点后有多少位数,我需要在小数点后转换为两位数,最后需要在最后的位置添加%。问题是,我将只格式化一次双倍值。我已经尝试过像这样DecimalFormat ("#.##%"), 但是小数点向前移动了两位数。请帮助我摆脱这个问题。 使用十进制格式(“#.##%”, 实际: