Yes, but you need to use the decimal (fixed-point) type, not the floating
point type.  Any program that's directly comparing FP numbers for exact
matches is simply wrong, and certainly won't be portable, even if it works
in one particular environment.  Fixed-point numbers CAN be compared for
exact matches, and they can include fractional values. 

james montebello

On Fri, 1 Feb 2002, Jim Dickenson wrote:

> Am I to assume that based on your response that one should never use a float
> field type if you ever want to select the data?
> 
> This causes a big problem for the way MyODBC 3.51 has been implemented. I
> was actually debugging a problem I had in MyODBC when I ran across this. The
> way MyODBC works is that is generates a native SQL statement. In my case the
> statement was:
> 
> UPDATE `junk` SET `record`=  91 WHERE record=1 AND title='This is item one'
> AND num1=12.3 AND num2=134 AND num3=0.100 AND code='abc' AND
> sdate='1991-11-30' AND stime='17:45:00' LIMIT 1
> 
> Since the float compare did not work (field num1), the record I wanted
> changed did not get changed.
> 
> The way our software works is that it fixes the variable number (num1) to
> the number of decimals in the constant number before the compare is done.
> There are ways for compares to be programmed so they do work. We are using
> computers after all.
> 
> 
> On 2/1/2002 2:06 PM, "Gerald Clark" <[EMAIL PROTECTED]>
> wrote:
> 
> > A floating point number can never be equal to 12.3.
> > It can be close, and with rounding display as 12.3, but it
> > won't actually be equal to 12.3.
> > Use a decimal type instead.
> > 
> > 
> > Jim Dickenson wrote:
> > 
> >> I am running mysql  Ver 11.15 Distrib 3.23.47, for pc-linux-gnu (i686)
> >> installed from a binary RPM file. This is using RedHat Linux 7.2.
> >> 
> >> I have a table described as:
> >> mysql> describe junk;
> >> +--------+---------------+------+-----+---------+-------+
> >> | Field  | Type          | Null | Key | Default | Extra |
> >> +--------+---------------+------+-----+---------+-------+
> >> | record | decimal(3,0)  | YES  |     | NULL    |       |
> >> | title  | varchar(250)  | YES  |     | NULL    |       |
> >> | num1   | float         | YES  |     | NULL    |       |
> >> | num2   | decimal(6,0)  | YES  |     | NULL    |       |
> >> | num3   | decimal(10,3) | YES  |     | NULL    |       |
> >> | code   | char(3)       | YES  |     | NULL    |       |
> >> | sdate  | date          | YES  |     | NULL    |       |
> >> | stime  | time          | YES  |     | NULL    |       |
> >> +--------+---------------+------+-----+---------+-------+
> >> 8 rows in set (0.00 sec)
> >> 
> >> It has the following data:
> >> mysql> select record,num1 from junk;
> >> +--------+----------+
> >> | record | num1     |
> >> +--------+----------+
> >> |      1 |     12.3 |
> >> |      2 |   17.785 |
> >> |      3 |  138.981 |
> >> |      4 |   -34.12 |
> >> |      5 | -12.7365 |
> >> |      6 |    -0.34 |
> >> +--------+----------+
> >> 6 rows in set (0.00 sec)
> >> 
> >> The following command does not update the row I would like it to:
> >> mysql> update junk set num1=12.4 where num1=12.3;
> >> Query OK, 0 rows affected (0.01 sec)
> >> Rows matched: 0  Changed: 0  Warnings: 0
> >> 
> >> 
> >> Can I get some insight as to what the problem might be?
> >> 
> >> Thanks,
> >> 
> > 
> 
> 


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to