# MySQL floats get approximate values

**URL:** <https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730>\
**Category:** Logstash\
**Created:** [July 26, 2018, 10:03am UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730 "2018-07-26T10:03:53Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jevgenij](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jevgenij/32/33543_2.png) [@Jevgenij](https://discuss.elastic.co/u/Jevgenij)\
**Post date:** [July 26, 2018, 10:03am UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/1 "2018-07-26T10:03:53Z")

</div>

MySQL fields of `float` type ain't passed to Elasticsearch with its exact values.

`10.95` for instance transforms to `10.949999809265137`.

Not a big difference, but becomes a problem while filtering against `equal` condition.

Any solution?

---

<div class="post-metadata">

**Author:** ![magnusbaeck](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/magnusbaeck/32/44943_2.png) [@magnusbaeck](https://discuss.elastic.co/u/magnusbaeck)\
**Post date:** [July 28, 2018, 7:16pm UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/2 "2018-07-28T19:16:30Z")

</div>

Well, floating-point values are by their very nature inexact. Exact comparisons are often not possible. Perhaps the original value isn't actually _exactly_ 10.95 but you've been tricked into thinking so because of some rounding somewhere?

---

<div class="post-metadata">

**Author:** ![Jevgenij](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jevgenij/32/33543_2.png) [@Jevgenij](https://discuss.elastic.co/u/Jevgenij)\
**Post date:** [July 31, 2018, 2:27pm UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/3 "2018-07-31T14:27:04Z")

</div>

It is actually `10.95` in my MySQL db:

```
mysql> select `value` from `table`;
+-------+
| value |
+-------+
| 10.95 |
| 16.95 |
...

```

By in my particular case [.round(2)](https://apidock.com/ruby/Float/round) solves the problem.

---

<div class="post-metadata">

**Author:** ![magnusbaeck](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/magnusbaeck/32/44943_2.png) [@magnusbaeck](https://discuss.elastic.co/u/magnusbaeck)\
**Post date:** [August 1, 2018, 5:59am UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/4 "2018-08-01T05:59:10Z")

</div>

The 10.95 and 16.95 values you're seeing there have most likely been rounded by the mysql client program.

---

<div class="post-metadata">

**Author:** ![Jevgenij](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jevgenij/32/33543_2.png) [@Jevgenij](https://discuss.elastic.co/u/Jevgenij)\
**Post date:** [August 1, 2018, 10:21am UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/5 "2018-08-01T10:21:00Z")

</div>

You are right!

```
mysql> select value*1000 from table;
+--------------------+
| value*1000 |
+--------------------+
| 10949.999809265137 |
| 16950.000762939453 |
...

```

Still, phpMyAdmin, MySQL Workbench and Sails-MySQL Adapter - each of these gives exact `10.95`.

Just official MySQL JDBC driver doesn't?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 29, 2018, 10:21am UTC](https://discuss.elastic.co/t/mysql-floats-get-approximate-values/141730/6 "2018-08-29T10:21:02Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
