为什么Java以科学计数法显示10位数字?

时间:2014-03-01 12:22:07

标签: java swing ms-access

我从Access数据库中检索了一个大数字。为什么Java会显示这个10位数字。尽管我使用“Number”作为该列的数据类型,但是在其单元格中为E + 9,而不是显示完整数字。

除了使用“Text”数据类型之外,有没有办法在单元格中显示完整数字而不是E +“”。如果没办法,怎么应该长久不行。从Java程序编码从数据库中检索?

例如: - 9867605659将使用Number数据类型显示为E + 9,可以从java程序输入,如何从数据库中取回它并将其设置为文本字段为9867605659?

enter image description here

import javax.swing.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import net.java.dev.designgridlayout.DesignGridLayout;
import java.io.*;
import net.java.dev.designgridlayout.Tag;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;  
import java.sql.*;

class Driverproblem
{
JFrame JF;
JDesktopPane JDP;
JInternalFrame JIF4,JIF13;
Container C,C4,C13;
JMenu FileMenu;
JMenuItem Settings,CompanyInfo;
JMenuBar JMB;
JLabel i4l1,i4l2,i4l3,i4l4,i4l5,i4l6,i4l7,i13l1,i13l2,i13l3,i13l4,i13l5,i13l6,i13l7;
JTextField i4t1,i4t2,i4t3,i4t4,i4t5,i4t6,i13t1,i13t2,i13t3,i13t4,i13t5,i13t6;
JButton i4b1,i13b1;
JTextArea i4ta1,i13ta1;
Color color;
public Driverproblem()
{
JF=new JFrame("Quick Accounting");
JDP=new JDesktopPane();
JMB=new JMenuBar();

C=JF.getContentPane();
color = Color.lightGray;
JDP.setBackground(color);
C.add(JDP,BorderLayout.CENTER);
C.add(JMB, BorderLayout.NORTH);
JF.pack();
JF.setLocationRelativeTo(null); 
JF.setVisible(true);

FileMenu=new JMenu("File"); 

CompanyInfo=new JMenuItem("Company Info");

CompanyInfo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
    {
    JIF4.setVisible(true);
    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection i4conn =        DriverManager.getConnection("Jdbc:Odbc:TomsJava");
        PreparedStatement i4ps = i4conn.prepareStatement("select * from i13SaveUserSettings");      
ResultSet i4rs =     i4ps.executeQuery();
        while(i4rs.next())
        {
            String i4companyName = i4rs.getString("Company_Name");
            String i4address = i4rs.getString("Address");
            String i4place = i4rs.getString("Place");
            long i4phone = i4rs.getLong("Phone");
            int i4pincode = i4rs.getInt("Pincode");
            String i4email = i4rs.getString("Email");
            String i4website = i4rs.getString("Website");
            System.out.println(i4phone);

            i4t1.setText(i4companyName);
            i4ta1.setText(i4address);
            i4t2.setText(i4place);
            i4t4.setText(String.valueOf(i4phone));
            i4t4.setText(String.valueOf(i4pincode));
            i4t5.setText(i4email);
            i4t6.setText(i4website);                
        }
        i4rs.close();
        i4ps.close();
        i4conn.close();


    }
    catch(SQLException e)
    {
        System.out.println(e);
    }
    catch(ClassNotFoundException z)
    {
        System.out.println(z);
    }
    catch(NumberFormatException n)
    {
        System.out.println(n);
    }
}
});
  JIF4 = new JInternalFrame("Company Information",true,true, true, true);  
 JIF4.setBounds(10, 10, 600, 500); 
    C4 = JIF4.getContentPane();
DesignGridLayout layout4 = new DesignGridLayout(C4);

    i4l1 = new JLabel("Company Name : ");
    i4l2 = new JLabel("Address : ");
    i4l3 = new JLabel("Place : ");
    i4l4 = new JLabel("Phone : ");
    i4l5 = new JLabel("Pincode : ");
    i4l6 = new JLabel("Email : ");
    i4l7 = new JLabel("Website : ");
    i4t1 = new JTextField(20);
    i4t2 = new JTextField(20);
    i4t3 = new JTextField(20);
    i4t4 = new JTextField(20);
    i4t5 = new JTextField(20);
    i4t6 = new JTextField(20);
    i4ta1 = new JTextArea(5,20);
    i4b1 = new JButton("Close");
i4b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
    {
    JIF4.dispose();
    }
});


layout4.row().grid(i4l1).add(i4t1);
layout4.row().grid(i4l2).add(i4ta1);
layout4.row().grid(i4l3).add(i4t2);
layout4.row().grid(i4l4).add(i4t3);
layout4.row().grid(i4l5).add(i4t4);
layout4.row().grid(i4l6).add(i4t5);
layout4.row().grid(i4l7).add(i4t6);
layout4.emptyRow();
layout4.row().center().add(i4b1);
JDP.add(JIF4);


Settings=new JMenuItem("Settings");
Settings.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
    {
    JIF13.setVisible(true);
    }
});
JIF13 = new JInternalFrame("User Settings",true,true, true, true);  
JIF13.setBounds(10, 10, 600, 500); 

    C13 = JIF13.getContentPane();
DesignGridLayout layout13 = new DesignGridLayout(C13);

    i13l1 = new JLabel("Company Name : ");
    i13l2 = new JLabel("Address : ");
    i13l3 = new JLabel("Place : ");
    i13l4 = new JLabel("Phone : ");
    i13l5 = new JLabel("Pincode : ");
    i13l6 = new JLabel("Email : ");
    i13l7 = new JLabel("Website : ");
    i13t1 = new JTextField(20);
    i13t2 = new JTextField(20);
    i13t3 = new JTextField(20); 
    i13t4 = new JTextField(20);
    i13t5 = new JTextField(20);
    i13t6 = new JTextField(20);
    i13ta1 = new JTextArea(5,20);
    i13b1 = new JButton("Save");
i13b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
    {
            try
        {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection i13conn = DriverManager.getConnection("Jdbc:Odbc:TomsJava");

        String i13companyName = i13t1.getText();
        String i13address = i13ta1.getText();
        String i13place = i13t2.getText();
        long i13phone = Long.valueOf(i13t3.getText());
        int i13pincode = Integer.parseInt(i13t4.getText());
        String i13email = i13t5.getText();
        String i13website = i13t6.getText();

        Statement i13stmt = i13conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        ResultSet i13rs = i13stmt.executeQuery("SELECT * FROM i13SaveUserSettings");
        i13rs.absolute(1);
        i13rs.updateString("Company_Name", i13companyName);
        i13rs.updateString("Address",i13address);
        i13rs.updateString("Place",i13place);
        i13rs.updateLong("Phone",i13phone);
        i13rs.updateInt("Pincode",i13pincode);
        i13rs.updateString("Email",i13email);
        i13rs.updateString("Website",i13website);
        i13rs.insertRow();

        i13rs.close();
        i13stmt.close();

        }       

    catch(SQLException e)
    {
    System.out.println(e);
    }
    catch(ClassNotFoundException z)
    {
    System.out.println(z);
    }
    catch(NumberFormatException n)
    {
    System.out.println(n);
    }
    JIF13.dispose();
    }
});


layout13.row().grid(i13l1).add(i13t1);
layout13.row().grid(i13l2).add(i13ta1);
layout13.row().grid(i13l3).add(i13t2);
layout13.row().grid(i13l4).add(i13t3);
layout13.row().grid(i13l5).add(i13t4);
layout13.row().grid(i13l6).add(i13t5);
layout13.row().grid(i13l7).add(i13t6);
layout13.emptyRow();
layout13.row().center().add(i13b1);

JDP.add(JIF13);

FileMenu.add(Settings);
FileMenu.add(CompanyInfo);
JMB.add(FileMenu);
}

public static void main(String args[]) throws SQLException,ClassNotFoundException
{
new Driverproblem();
}

}

1 个答案:

答案 0 :(得分:2)

您的问题源于您显然正在尝试将[电话]存储为Number。虽然我们倾向于将它们称为“电话号码”,但它们实际上只是数字串。它们不是数学意义上的“数字”,因为我们不需要对它们进行计算。 (例如,添加或减去两个电话号码没有任何用处。)

因此,您只需使用Access数据库中的Text字段来存储[Phone](也可能使用[Pincode]的Text字段)。

编辑重新评论

关于非常大(或非常小)的数字的显示,有几个因素可能导致数字以科学记数法出现。例如,在文本框中显示非常大的数字时,UI代码可以将数字切换为科学记数法

  • 如果值超过给定的有效位数,或
  • 如果文本框太窄而无法以标准表示法显示整个数字,那么UI代码可能会选择科学记数法而不是截断值(或产生“{溢出”显示,如#######)。

当然,像DoubleSingle这样的浮点类型最有可能出现在科学记数法中,因为它们的值范围太大,以至于在某些时候我们不得不使用它。这可以通过以下Java代码来说明,其中Access表中的两个字段都包含12345678

ps = con.prepareStatement(
        String.format("SELECT DoubleField, LongIntField FROM DemoTable WHERE ID=1")
        );
ResultSet rs = ps.executeQuery();
rs.next();
System.out.println(rs.getDouble(1));
System.out.println(rs.getInt(2));
System.out.println(9223372036854775807L);

控制台输出

1.2345678E7
12345678
9223372036854775807

请注意,[DoubleField]值以科学计数法显示,即使更多空间比等效的标准表示法(12345678.0)更多。 Java显然已经确定这个数字“足够大”以保证转换为科学记数法。另请注意,Java很高兴地打印出尽可能大的Long值,即使它 大于Double值。