具有任意小数位数的 JFormattedTextfield

Posted

技术标签:

【中文标题】具有任意小数位数的 JFormattedTextfield【英文标题】:JFormattedTextfield with any number of fraction digits 【发布时间】:2016-01-22 05:45:51 【问题描述】:

如何创建一个JFormattedTextField,它可以接受十进制数中任意数量的小数位?

 JFormattedTextField tf = new JFormattedTextField();
      tf
      .setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(
          new javax.swing.text.NumberFormatter(new java.text.DecimalFormat())));

这仅接受 3 个小数位数,因为 DecimalFormat 的最大小数位数默认为 3。

【问题讨论】:

docs.oracle.com/javase/7/docs/api/java/text/… 这可能会有所帮助:***.com/questions/14876695/… 它要求设置最大小数位数。但就我而言,我不知道最大小数位数 【参考方案1】:

这会将小数位数设置为最大值:

JFormattedTextField tf = new JFormattedTextField();
DecimalFormat df = new java.text.DecimalFormat();
df.setMaximumFractionDigits(Integer.MAX_VALUE);
tf.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(
    new javax.swing.text.NumberFormatter(df)));

请注意,这并不意味着您的问题中的“任何数字”。如setMaximumFractionDigits的Javadoc中指定:

具体的子类可能会对该值强制设置上限 适合被格式化的数字类型。

这在你的例子中并不重要,但是

对于除 BigInteger 和 BigDecimal 对象以外的格式化数字, 使用 newValue 和 340 中的较低值。负输入值是 替换为 0。

但我想这对于大多数情况来说应该足够了。

【讨论】:

以上是关于具有任意小数位数的 JFormattedTextfield的主要内容,如果未能解决你的问题,请参考以下文章

使用任意小数位数格式化 SQL 数值查询结果

cpp保留任意小数点位数

如何保留小数点后任意一位数

检查浮点数是否具有指定的位数和小数位数

如何在 .NET 中将双精度值转换为具有固定小数位数的小数类型值

Javascript如何将十进制数转换为具有特定小数位数的字符串