[前][次][番号順一覧][スレッド一覧]

mysql:16131

From: "yoku ts." <"yoku ts." <yoku0825@xxxxxxxxxx>>
Date: Mon, 9 Jun 2014 10:31:33 +0900
Subject: [mysql 16131] Re: [mysql 16130] Re: [mysql 16129] Re: [mysql 16128] MySQLのfloat型の有効桁数について

こんにちは、yoku0825といいます。

float型の…という件名だったのでfloat型な返信をしましたが、
なんらかの理由でこだわりがあるというわけで *ないのであれば* DECIMAL型の方が良いと思います。


mysql56> CREATE TABLE t1 (num decimal(32, 20));
Query OK, 0 rows affected (0.05 sec)

mysql56> INSERT INTO t1 VALUES (1.2345678901234567890);
Query OK, 1 row affected (0.00 sec)

mysql56> SELECT * FROM t1;
+------------------------+
| num                    |

+------------------------+
| 1.23456789012345678900 |

+------------------------+
1 row in set (0.00 sec)


こちらの方が、丸め誤差もありませんし。


yoku0825


2014年6月9日 0:38 ktsa5236@xxxxxxxxxx <ktsa5236@xxxxxxxxxx>:

> yoku0825さん

>

> お返事遅くなりまして、申し訳ございません。

>

> ご回答、有難うございます。

> 確かに7桁は保存はされているようですね。

>

> yoku0825さんのテーブルでround()関数を使って、もう少し試してみました。

>

> mysql> SELECT num, ROUND(num,5),ROUND(num,6),ROUND(num,7) ,ROUND(num,8)

> ,ROUND(num,9),ROUND(num,13) from t1;

> +--+--+--+--+--+--+--+

> | num | ROUND(num,5) | ROUND(num,6) | ROUND(num,7) | ROUND(num,8) |

> ROUND(num,9) | ROUND(num,13) |

> +--+--+--+--+--+--+--+

> | 1.23457 | 1.23457 | 1.234568 | 1.2345679 | 1.23456788 | 1.234567881 |

> 1.2345678806305 |

> +--+--+--+--+--+--+--+

> 1 row in set

>

> アプリ側では、長めの第2引数のround()関数で逃げておけば良さそうですね。

>

> 有難うございました。

>

>

>

> 2014年6月3日 11:10 yoku ts. <yoku0825@xxxxxxxxxx>:

>

> こんにちは、yoku0825といいます。

>>

>> 内部的にはCのfloatを使っているので、格納はされているけれど丸められているんだと思います。

>> (↓5.6ですが)

>>

>> mysql56> CREATE TABLE t1 (num float not null, num_20 float(20, 16));

>> Query OK, 0 rows affected (0.05 sec)

>>

>> mysql56> INSERT INTO t1 VALUES (1.2345678901234567890,

>> 1.2345678901234567890);

>> Query OK, 1 row affected (0.01 sec)

>>

>> mysql56> SELECT * FROM t1;

>> +---------+--------------------+

>> | num     | num_20             |

>> +---------+--------------------+

>> | 1.23457 | 1.2345678806304932 |

>> +---------+--------------------+

>> 1 row in set (0.00 sec)

>>

>> mysql56> SELECT num* 10000, num_20* 10000 FROM t1;

>> +--------------------+------------------------+

>> | num* 10000         | num_20* 10000          |

>> +--------------------+------------------------+

>> | 12345.678806304932 | 12345.6788063049320000 |

>> +--------------------+------------------------+

>> 1 row in set (0.00 sec)

>>

>> 掛け算で値が狂うのは、浮動小数点数なのでご愛嬌(?)

>> 表示桁数の制御はこのあたりですかね。。

>>

>> http://dev.mysql.com/doc/refman/5.6/en/floating-point-types.html

>>

>>

>> yoku0825

>>

>>

>> 2014年6月3日 10:38 ktsa5236@xxxxxxxxxx <ktsa5236@xxxxxxxxxx>:

>>

>> いつもお世話になっております。ktsaと申します。

>>> 表題の件について教えていただきたいのですが、

>>> MySQLのfloat型は、IEEE754に則っているのでしょうか?

>>> 7桁ではなく、常に有効数字6桁までしか保存されないように思います。

>>>

>>> 環境とテスト内容ですが、

>>> MySQL5.0.22-community-nt

>>>

>>> データベースはInnoDB

>>>

>>> CREATE TABLE `testtb` (

>>>   `A` tinyint(4) NOT NULL default '0',

>>>   `B_dbl` double default NULL,

>>>   `C_float` float default NULL,

>>>   PRIMARY KEY  (`A`)

>>> ) ENGINE=InnoDB DEFAULT CHARSET=sjis;

>>>

>>> Insert into testtb

>>> values(11,1.2345678901234567890,1.2345678901234567890);

>>>

>>> を実行する。

>>> コンソール実行画面結果は、

>>>

>>> mysql> Insert into testtb

>>> values(11,1.2345678901234567890,1.2345678901234567890);

>>> Query OK, 1 row affected

>>>

>>> mysql> select * from testtb where A=11;

>>> +----+------------------+---------+

>>> | A  | B_dbl            | C_float |

>>> +----+------------------+---------+

>>> | 11 | 1.23456789012346 | 1.23457 |

>>> +----+------------------+---------+

>>> 1 row in set

>>> とC_float列は7桁目が丸めまれ常に有効数字が6桁になります。

>>> 他の値でも試しましたが同様でした。

>>>

>>> よろしくお願いいたします。

>>>

>>

>>

>


添付ファイル

[前][次][番号順一覧][スレッド一覧]

   @ 16128 2014-06-03 10:38 ["ktsa5236@xxxxxxxxxx] MySQLのfloat型の有効桁数について        
   @ 16129 2014-06-03 11:10 ┗["yoku ts." <yoku0825] Re: [mysql 16128] MySQLのfloat型の有効桁数について
   @ 16130 2014-06-09 00:38  ┗["ktsa5236@xxxxxxxxxx] Re: [mysql 16129] Re: [mysql 16128] MySQLのfloat型の有効桁数について
-> @ 16131 2014-06-09 10:31   ┗["yoku ts." <yoku0825] Re: [mysql 16130] Re: [mysql 16129] Re: [mysql 16128] MySQLのfloat型の有効桁数について
   @ 16132 2014-06-11 11:37    ┗["ktsa5236@xxxxxxxxxx] Re: [mysql 16131] Re: [mysql 16130] Re: [mysql 16129] Re: [mysql 16128] MySQLのfloat型の有効桁数について