mysql中的float和double数据类型未存储java程序所需的完整数字

mysql中的float和double数据类型未存储java程序所需的完整数字,java,mysql,floating-point,double,decimal,Java,Mysql,Floating Point,Double,Decimal,我正在使用JavaSwing应用程序在mysql数据库中存储一些值,但它没有存储输入的全部数字。例如,如果我使用float作为mysql数据库列的数据类型,它只存储6位数字,如果我输入123456.56,它只存储123456.00,或者如果我输入12345.67,它只存储12345.60。当我将mysql的数据类型更改为double时也是一样,它只存储8位数字,因此如果我输入1234567.89,它只存储1234567.90位数字,并将第8位数字取整。我的编码有什么问题?谢谢我希望将全额存储在数

我正在使用JavaSwing应用程序在mysql数据库中存储一些值,但它没有存储输入的全部数字。例如,如果我使用float作为mysql数据库列的数据类型,它只存储6位数字,如果我输入123456.56,它只存储123456.00,或者如果我输入12345.67,它只存储12345.60。当我将mysql的数据类型更改为double时也是一样,它只存储8位数字,因此如果我输入1234567.89,它只存储1234567.90位数字,并将第8位数字取整。我的编码有什么问题?谢谢我希望将全额存储在数据库中,例如数百万和几十万,例如12345678.55或445874.44,而无需将其转换为指数量或缩短。我该怎么做

if(source == btn_confirm)
        {
            dbconnect connect = new dbconnect();

            String page = text_page.getText();
            String line = text_line.getText();
            String refpage = text_refpage.getText();
            String refline = text_refline.getText();
            String transaction_date = text_transdate.getText();
            String description = text_desc.getText();
            String account_code = text_accountcode.getText();
            String code_type = text_codetype.getText();
            String issue_date = text_issuedate.getText();
            String amount = text_amount.getText();

            System.out.println(amount);

            try
            {
                connect.addTransaction(page, line, refpage, refline, transaction_date, description, account_code, code_type, issue_date, amount);
                connect.close();
            }
            catch (Exception x)
            {
                System.out.println(x);
            }

            text_page.setText("");
            text_line.setText("");
            text_refpage.setText("");
            text_refline.setText("");
            text_transdate.setText("");
            text_desc.setText("");
            text_accountcode.setText("");
            text_codetype.setText("");
            text_issuedate.setText("");
            text_amount.setText("");

            text_page.requestFocus();
        }
文本金额是包含要传递给字符串金额的数字的文本字段。string过去是一个float,但我选择使用string,因为我认为在将它传递到sql语句中时,它不会有多大区别。我以前用的是parsefloat

addTransaction方法向mysql数据库添加一个事务,如下所示:

 public void addTransaction(String page, String line, String refpage, String refline, String transaction_date, String description, String account_code, String code_type, String issue_date, String amount) throws Exception
{
    try
    {
        connect();
        statement = conn.createStatement();
        statement.executeUpdate("insert into transaction (page, line, refpage, refline, transaction_date, description, account_code, code_type, issue_date, amount) values ('" + page + "', '" + line + "', '" + refpage + "', '" + refline + "', '" + transaction_date + "', '" + description + "', '" + account_code + "', '" + code_type + "','" + issue_date + "', " + amount + ")");
        System.out.println("Inserted transaction of page: " + page + " and line: " + line);
    }
    catch (Exception e)
    {
        throw e;
    }
}

您是如何初始化该列的?如果存储为float,则可以使用以下格式存储它-float(M,D),其中M是总位数,D是小数点后的位数

如果已经创建了表,并且不希望丢失表中已存储的信息,则可以使用以下查询修改列类型:

ALTER TABLE tableName
ALTER COLUMN columnName FLOAT(M,D); 
相应地更换M和D


FLOAT
只有24位精度。这相当于大约7位十进制数字。因此,不可能存储比您看到的更多的内容

FLOAT(12,2)
在我看来没有任何用处。它四舍五入两次——一次是十进制,一次是二进制。使用
十进制(12,2)
或普通
浮点
双精度

DOUBLE
提供大约16位精度。同样,不要使用
(m,n)
,也不要期望它能容纳更多的53位数字


MySQL可以处理65位十进制数字:
decimal(65,…)
。但是,它是固定的,因为您在小数点后指定了一个固定的位数。

我在哪里初始化或实现它?我使用mysql workbench,没有初始化或输入M或D的功能。谢谢。当您创建表时,您已经定义了每一列,在列类型中输入FLOAT(M,D)并根据需要替换M和D。如果这不起作用,那么您的swing应用程序可能无法传递整个数字。谢谢,我在alter table中找到了它,并更改了数据类型中的值。。是的,你是对的,我的Java swing应用程序没有传递完整的数字,并将其转换为指数,并将其剪切到第8位。我使用amount=Float.parseFloat(text_amount.getText());要将我的文本字段号转换为浮点数,有没有办法纠正这个问题?我已经将浮点数设置为(12,2),但它仍然舍入到第7位。没关系,我已经解决了它,我将Mysql中的数据类型改为Deciman(12,2)。这似乎可行。谢谢。你怎么知道它被截断了呢?用Java和MySQL向我们展示接收数据并显示缩短结果的代码,以及所有声明。编辑了这个问题供你审阅。
text\u amount
的声明是什么?它是
float
还是
float
或其他什么?Text\u amount是一个文本字段,表中
amount
的“数据类型”是什么?有多个地方可能发生转换;为了回答您的问题,我们需要识别它们。