mysql浮点类型

fen*_*nec 0 java mysql types

我有一个数据库order,pricedeposit字段设置为浮点类型.我也正在实现java gui来搜索订单,问题是当我尝试在数据库中搜索订单时我找不到任何东西,因为当我从字符串转换为float时它节省了价格= 55.0并且在数据库中它保存为55.问题是什么?我应该使用什么类型来表示来自双方,java方面和mysql方面的货币?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {        
    try{
        //collect arguments
        String category = this.jTextField8.getText();
        String pattern=this.jTextArea1.getText();
        String color=this.jTextArea2.getText();
        float price = Float.valueOf(this.jTextField14.getText()).floatValue();
        float deposit = Float.valueOf(this.jTextField15.getText()).floatValue();

        //create new order
        int row=this.customerSelectedRow;
        Order newOrder=new order(this.customerModel.dataVector.get(row),category,pattern,color,price,deposit);
        newOrder.search();           
        //refresh
        this.jDialogNewOrder.setVisible(false);

    }catch(Exception e){
         System.err.println (" Error message: " + e.getMessage ());
    }

}                     
Run Code Online (Sandbox Code Playgroud)

这是搜索方法的代码

try {
                s = c.conn.prepareStatement("SELECT id FROM `"+this.table+
                        "` WHERE customerId=? AND category=? and pattern=? and color=? and deposit=? and price=?");
                s.setInt(1,this.customer.getId());
                s.setString (2, this.category);
                s.setString (3, this.pattern);
                s.setString (4, this.color);
                s.setFloat(5,this.deposit);
                s.setFloat(6,this.price);
                System.err.println(s.toString());
                ResultSet res = s.executeQuery();

                System.out.println("printing ids :");
                while (res.next()) {
                  int i = res.getInt(1);
                  //assigning the correct id to the inserted customer
                  this.id=i;
                  System.out.println("id" + "=" + i);
                }
            } catch (SQLException e) {
                System.err.println ("find id Error message: " + e.getMessage ());
                System.err.println ("find id Error number: " + e.getErrorCode ());
Run Code Online (Sandbox Code Playgroud)

coo*_*ird 10

您是否使用浮点值处理货币?

请不要.

浮点值不能表示精确的十进制值,因为它们是二进制分数的表示.除非您希望以$ 1.0000000000001之类的值结束,否则请使用整数的数据类型,例如十进制类型.

使用==运算符的比较不能按预期工作的原因是因为许多可以用十进制表示的数字不能用浮点表示,因此没有完全匹配.

这是一个小例子:

System.out.println(1.00000001f == 1.00000002f);
System.out.println(200000.99f - 0.50f);
Run Code Online (Sandbox Code Playgroud)

输出:

true
200000.48
Run Code Online (Sandbox Code Playgroud)

这两个例子应该表明依赖货币的浮点值不是一个好主意.

至于货币值的存储,似乎DECIMALMySQL中也有一个类型,所以我认为这将是一个更好的选择,除非有某种CURRENCY类型 - 我对SQL数据库不够熟悉知情见解.

以下是MySQL 5.1参考手册第10.2节:数字类型的一些信息:

DECIMALNUMERIC数据类型是用来存储精确数字数据值.在MySQL中,NUMERIC实现为DECIMAL.这些类型用于存储保持精确精度的重要值,例如使用货币数据.

这是一个相关的问题: