代码之家  ›  专栏  ›  技术社区  ›  Sejanus

Java本地化数字格式化

  •  4
  • Sejanus  · 技术社区  · 15 年前

    Java使用小数周期,例如1/2=0.5。

    有没有办法让它用逗号代替,如1/2=0,5?千万别用逗号(比如十万=100000),而是用空格(100000)?

    在输出方面,我想我可以使用各种字符串格式的函数,但问题在于输入(jtable)。有些列需要双格式,因此用户必须输入类似45.5的内容,在这些部分中,它们用于45,5:)提前感谢

    更新:

    我尝试使用myTable.setDefaultLocale(locale.germany);但它不起作用。我还做了locale.setdefault(locale.germany);@main函数,它确实工作了,但是用了一种非常愚蠢的方式:当单元格处于编辑模式时,必须正常输入点,即45.5,但是 之后 按Enter确认更改,它显示为逗号:45,5。我的意思是,它只在显示时使用逗号,但在编辑时还是使用同一个ol'dot。

    有什么办法修理它吗 没有 正在编写自定义表模型?

    3 回复  |  直到 15 年前
        1
  •  2
  •   BalusC    15 年前

    因此,你基本上想 转换 局限的 String 假设以数字格式表示成 Number/BigDecimal 反之亦然?

    在那里你有 java.text.DecimalFormat 为了。要了解更多信息,请咨询 Sun's own tutorial 关于这个主题。

    要本地化Swing应用程序,请使用 JComponent#setDefaultLocale() . 例如。

    JComponent.setDefaultLocale(Locale.GERMANY);
    
        2
  •  5
  •   cletus    15 年前

    看一看 Formatting and Parsing a Number for a Locale :

    // Format for CANADA locale
    Locale locale = Locale.CANADA;
    String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56
    
    // Format for GERMAN locale
    locale = Locale.GERMAN;
    string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56
    
    // Format for the default locale
    string = NumberFormat.getNumberInstance().format(-1234.56);
    
    
    // Parse a GERMAN number
    try {
        Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56");
        if (number instanceof Long) {
            // Long value
        } else {
            // Double value
        }
    } catch (ParseException e) {
    }
    
        3
  •  1
  •   Oleg Ryaboy    15 年前

    要正确处理输入,可以实现自己的TableModel并覆盖setValueAt方法。