我在下面有以下 JSON 示例:
{
"value": 946.2,
"description": "O valor é R$ 946,20."
}
我需要使用 MessageFormat 来 JUnit 测试这个 JSON 示例,但我得到了一个无效值,因为我的语言环境不是英语。如果我将语言环境更改为英语而不是巴西葡萄牙语,我会收到无效描述,因为货币值以英语显示。
这是我的代码:
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.Locale;
Locale.setDefault(Locale.ENGLISH);
System.out.println(MessageFormat.format("""
'{'
"value": {0},
"description": "O valor é {0,number,currency}."
'}'
""", new BigDecimal(946.2)));
如何格式化值或描述以获得上面显示的 JSON?
最佳答案
这是一个 String.format
解决方案,具有两个内部(本地化、自定义)NumberFormat
ters:
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Locale;
public class OtherMain {
private static final Locale LOCALE_PT_BR = new Locale.Builder().
setLanguage("pt").
setRegion("BR").
build();
private static final NumberFormat DEFAULT_NUMBER_FMT
= NumberFormat.getNumberInstance(Locale.US);
private static final NumberFormat MY_SPECIAL_NUMBER_FMT
= NumberFormat.getCurrencyInstance(LOCALE_PT_BR);
static {
// this disables "thousands sperarator", we can adjust DEFAULT_NUMBER_FMT as well...
MY_SPECIAL_NUMBER_FMT.setGroupingUsed(false);
}
public static void main(String[] args) {
final BigDecimal num = new BigDecimal(99946.2);
System.out.format("""
{
"value": %s,
"description": "O valor é %s."
}
""",
DEFAULT_NUMBER_FMT.format(num),
MY_SPECIAL_NUMBER_FMT.format(num)
);
}
}
打印:
{
"value": 99,946.2,
"description": "O valor é R$ 99946,20."
}
关于java - 是否可以在同一个 MessageFormat 中使用多个 Locales?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70629200/