如何在 JLabel 和 JTextField 上显示非科学格式的值?

Posted

技术标签:

【中文标题】如何在 JLabel 和 JTextField 上显示非科学格式的值?【英文标题】:How do I display non-scientific formatted values on a JLabel and JTextField? 【发布时间】:2011-06-08 14:51:27 【问题描述】:

我有一个可以包含双精度、整数、ascii 或字节值的字符串值,我将该值放入 JLabel 中。我希望 double 和 long 值采用 4000000000000 的形式,而不是 java JLabel 默认打印样式 4.0E12。现在我知道字符串中的数据类型是什么,但我不知道如何让 JLabel 只显示双精度和整数值的非科学形式。

这是我目前尝试过的:

String str = value; // string that holds the value

switch (var) // var that says which data type my str is

  case LONG:
  //convert my string from scientific to non-scientific here
  break;
  case DOUBLE:
  //convert my string from scientific to non-scientific here
  break;
  case ASCII:
  //do nothing
  break;
  ...


JLabel label = new JLabel();
label.setText(str); //Want this to be in non-scientific form

但这种方法仍然只打印科学形式。

编辑:

我的转换如下:

str = new DecimalFormat("#0.###").format(str);

也是的,它是一个长值,为了清楚起见,我省略了一些数据类型变量。 我不知道这是否适用于所有情况,即使我确实让它工作。我需要它来处理整数、长整数、扩展、双精度和浮点数。

【问题讨论】:

听起来您的转换不正确。您能否提供如何进行转换的代码? JLabel 只会打印您给它的文本。如果文本是错误的,你给它的文本是错误的。顺便说一句,int 的值不可能那么大,你的意思是 long 吗? @Peter Lawrey:我已经提供了附加代码以及 int to long 解释 【参考方案1】:

您必须使用不同的 JLabel,因为它默认不进行任何转换

JFrame frame = new JFrame();
JLabel label = new JLabel();
DecimalFormat df = new DecimalFormat("#0.###");
label.setText(df.format(4e12));
frame.add(label);
frame.pack();
frame.setVisible(true);

显示一个窗口

4000000000000

我只是通过该转换得到以下结果

DecimalFormat df = new DecimalFormat("#0.###");
System.out.println(df.format(400000000));
System.out.println(df.format(4000000000000L));
System.out.println(df.format(4e12f));
System.out.println(df.format(4e12));

打印

400000000
4000000000000
3999999983616   <- due to float rounding error.
4000000000000

【讨论】:

是的,这是正确的方法,我实际上有另一个方法,但这导致它打印错误的值。谢谢!

以上是关于如何在 JLabel 和 JTextField 上显示非科学格式的值?的主要内容,如果未能解决你的问题,请参考以下文章

JLabel自动将其自身集中在GridBagLayout中

人品计算器 JFrame 窗体软件版 JPanel JTextField JTextArea JButtton JLabel setContentPane

Swing JTextField如何去掉边框?

GUI基础1

java gridlayout 如何实现30行2列如图示的排列?

强制 JTextField 在出现时选择其所有内容