gpt4 book ai didi

java - DecimalFormat 点和逗号作为十进制分隔符

转载 作者:行者123 更新时间:2023-11-30 02:33:19 25 4
gpt4 key购买 nike

我曾经编写过此代码来格式化 JFormattedTextField

DecimalFormat decimalFormat = new DecimalFormat("#0.00");
NumberFormatter nf = new NumberFormatter(decimalFormat);
nf.setValueClass(Double.class);
nf.setAllowsInvalid(true);
nf.setOverwriteMode(false);
tfPreisIntern = new JFormattedTextField(nf);

一段时间后,我意识到如果用户输入 4,50 而不是 4.50 然后该值设置为 4.00 就会出现问题code> 而不是 4.504,50。我认为这是我的 DecimalFormat 的问题。现在我的问题是,是否可以使用逗号和点作为小数点分隔符?解决方法也可以

我将值从 JFormattedTextField 转换为 BigDecimal 的方法:

public static BigDecimal getBigDecimal(Object value) {
BigDecimal ret = null;
if (value != null) {
if (value instanceof BigDecimal) {
ret = (BigDecimal) value;
} else if (value instanceof String) {
ret = new BigDecimal((String) value);
} else if (value instanceof BigInteger) {
ret = new BigDecimal((BigInteger) value);
} else if (value instanceof Number) {
ret = new BigDecimal(((Number) value).doubleValue());
} else {
throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass()
+ " into a BigDecimal.");
}
}
return ret;
}

我在这里看到的逗号问题是构造函数BigDecimal(string)只允许使用小数点而不是逗号

编辑:

现在尝试使用MaskFormatter,如下所示:

    MaskFormatter mask = new MaskFormatter("*#.##");
mask.setPlaceholderCharacter(' ');
mask.setCommitsOnValidEdit(false);

但我无法输入像 2.50 这样的值。仅当我使用像 #.## 这样的掩码时,这才有效。但我需要在点之前有 1 和 2 位数字的可能性

最佳答案

当你检查Oracle tutorial你可以发现:

  • 对于格式设置,可以更改格式符号,但是
  • 对于解析来说,没有这样的事情。

这很有意义:您只是在问“我希望用户能够获得各种不一致的数据;代码会神奇地将其转变为用户的意思”。

改善用户体验的一种方法:而不是使用格式化的文本字段;您可以简单地允许用户输入字符串。然后你编写 validator 来实现“魔法”。

换句话说:如果您希望“4,59”和“4.59”结果相同,那么您需要为此编写代码。这可以像使用 indexOf() 来计算 if "."一样简单。或“,”出现在传入字符串中(ONCE);然后尝试使用不同模式对每种情况使用“格式化”解析。如果您决定走那条通往深渊的陡峭路线,请开始阅读有关 InputVerifiers here 的内容。例如。

但是当然:这可能会变得很复杂;因为正如所说;您基本上是允许用户输入任何数据;并期待猜测他的意思。

我个人的两分钱:在该文本字段周围放置大量警告/示例;并允许完全一个基于区域设置的输入类型。当他违反这一规定时,他会打用户的手指。

关于java - DecimalFormat 点和逗号作为十进制分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43754893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com