Tag: number formatting

挪威语,Bokmal(挪威)问题的地区

对于上述区域设置,在窗口7下的Excel中打开下载的CSV文件时,我遇到了问题。 有时,该数字被视为日期,并且所有单元格都未对齐并且格式不正确。 我已经用本地化格式编写了CSV下载代码。 它适用于除此之外的所有区域。 我投入了这个问题,并且知道在Windows 7系统上定义的格式与从挪威语,Bokmal(挪威)的 ServletRequest#getLocale()中检索到的语言环境不匹配。 这是我的代码: Servlet的: Locale locale = request.getLocale(); DecimalFormat decimalFormatter=(DecimalFormat)DecimalFormat.getInstance(locale); locale.getDisplayCountry(); // empty string decimalFormatter.toLocalizedPattern(); // #,##0.### locale.getDisplayLanguage(); // Norwegian Bokmål locale.toString(); // nb 现在看一下上面代码中的数字分组符号和十进制符号 。 我的问题:如何在Windows 7上获得正确的数字格式模式? 以下是Firefox中设置的语言的屏幕截图。 以下是Windows 7上语言和区域的屏幕截图,其中数字数字分组符号是单个空格, 十进制符号是逗号。

在Java中,为什么小数分隔符遵循Locale的语言,而不是其国家/地区,更重要的是,如何覆盖它?

我正在开展一个国际项目,并且观察到,在Java中,小数分隔符的选择基于Locale的语言,而不是其国家。 例如: DecimalFormat currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale(“it”,”IT”)); System.out.println(currencyFormatter.format(-123456.78)); currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale(“en”,”IT”)); System.out.println(currencyFormatter.format(-123456.78)); 产生以下输出: -123.456,78 -123,456.78 我原本期望它跟随这个国家,因为如果我在国内,无论我说英语还是意大利语,那个国家的数字都用小数点分隔符写成逗号。 我的问题是双重的: 有谁知道为什么这种行为遵循语言? 更重要的是,任何人都可以提供有关如何修改Java中的默认行为以遵循该语言的详细信息吗? 谢谢。

NumberFormat解析不够严格

我有一个带有Locale.US的NumberFormat的JFormattedTextField 。 因此小数点分隔符是点,分组分隔符是逗号。 现在我在此文本字段中键入字符串“1,23”并将焦点移动到另一个组件。 我希望字符串消失(就像我输入“a”而不是“1,23”时那样),因为在使用Locale.US时它显然不是数字的有效表示。 但是,文本字段中的文本将更改为“123”。 这是因为在解析时使用的NumberFormat并不严格,只是忽略逗号。 问题 :在这种情况下,如何告诉NumberFormat抛出ParseException ,以便在将焦点移动到另一个组件后文本字段为空? 测试代码: JDialog dialog = new JDialog(); JPanel panel = new JPanel(new BorderLayout()); dialog.getContentPane().add(panel); NumberFormat nf = NumberFormat.getInstance(Locale.US); JFormattedTextField textField = new JFormattedTextField(nf); textField.setText(“1,23”); panel.add(textField, BorderLayout.CENTER); panel.add(new JButton(“focus”), BorderLayout.EAST); dialog.pack(); dialog.setVisible(true); 将焦点从文本字段移动到按钮,文本将更改为“123”。

JFormattedTextField格式化百分比数字?

我想使用JFormattedTextField将浮点数格式化为百分比值,允许输入从0到100%(转换为0.0f-1.0f),始终显示百分号并禁止任何无效字符。 现在我用NumberFormat.getPercentInstance()和NumberFormatter属性进行了一些实验,但没有成功。 有没有办法创建一个遵循标准类遵守这些规则的JFormattedTextField? 或者我必须实现自己的NumberFormatter? 这就是我到目前为止(无法输入100%,输入0完全打破它): public class MaskFormatterTest { public static void main(String[] args) throws Exception { JFrame frame = new JFrame(“Test”); frame.setLayout(new BorderLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); NumberFormat format = NumberFormat.getPercentInstance(); NumberFormatter formatter = new NumberFormatter(format); formatter.setMaximum(1.0f); formatter.setMinimum(0.0f); formatter.setAllowsInvalid(false); formatter.setOverwriteMode(true); JFormattedTextField tf = new JFormattedTextField(formatter); tf.setColumns(20); tf.setValue(0.56f); frame.add(tf); frame.pack(); frame.setVisible(true); } }

如何获得用户从JFormattedTextField看到的相同值?

我正在使用NumberFormatter和JFormattedTextField ,但.getValue()不会返回与用户看到的值相同的值。 我认为输入字符串是使用NumberFormats parse-method解析的,我从NumberFormat.getNumberInstance();得到Numberformat NumberFormat.getNumberInstance(); 与实际的区域设置。 所以我认为我不能轻易扩展它并编写自己的解析方法? 例如 ,如果用户键入1234.487则getValue()将返回: 1234.487但将显示用户1,234.49 另一个例子 ,使用NumberFormat.getCurrencyInstance(); 。 用户1234.487 , getValue()将返回1234.487但用户将显示$1,234.49 相反 ,如果Formatter无法在不进行舍入的情况下格式化值,则需要生成ParseException。 同样的事情,如果用户键入4.35b6 ,默认情况下格式化程序将显示4.35 ,值将为4.35 ,但我想要一个ParseException,因为用户键入了无效值。 这是我尝试过的代码: NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(2); nf.setMinimumFractionDigits(2); final JFormattedTextField ftf = new JFormattedTextField(nf); ftf.setValue(new BigDecimal(“1234.50”)); // Print the value from ftf final JTextField txt = new JTextField(12); txt.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent […]

JTable单元编辑器编号格式

我需要在jTable中显示精确的2位小数。 为此,我创建了一个自定义单元格编辑器: public class NumberCellEditor extends DefaultCellEditor { public NumberCellEditor(){ super(new JFormattedTextField()); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column); if (value!=null){ DecimalFormat numberFormat = new DecimalFormat(“#,##0.00;(#,##0.00)”); editor.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(numberFormat))); Number num = (Number) value; String text = numberFormat.format(num); editor.setHorizontalAlignment(SwingConstants.RIGHT); […]