« Return to Thread: Floating point imprecision in activerecord-jdbc-adapter?

Re: Floating point imprecision in activerecord-jdbc-adapter?

by Justin Coyne :: Rate this Message:

Reply to Author | View in Thread

I'm just going into a new empty database and running the following sql.

create table samples
( id int(11) primary key auto_increment,
  name varchar(10) not null,
  density float not null);

insert into samples (name, density) values ('br1991a', 5.8);

Sorry for not including this earlier.

-Justin



On Tue, Jul 7, 2009 at 1:41 AM, Uwe Kubosch <uwe@...> wrote:
How do you populate the table before running the test?  Can you show us
this?

On Mon, 2009-07-06 at 15:54 -0500, Justin Coyne wrote:
> I've got an application where I run a query and get the expected
> result of 5.8 from the database when I run the program under MRI.
> When I switch to jruby (and jdbcmysql-adapter) I'm getting the result
> 5.80000019073486.
>
> Here's the code for MRI:
>
> SPEC = { :username => 'test', :password =>
> 'test', :database=>'test', :host=>'localhost'}
> require 'test/unit'
> require 'rubygems'
> require 'active_record'  ## For AR::ConnectionNotEstablished
> require "active_record/connection_adapters/mysql_adapter"
>
> class TestPrecision < Test::Unit::TestCase
>
>   def test_correct_precision
>     connection = ActiveRecord::Base.send("mysql_connection", SPEC)
>     assert_equal "5.8", connection.select_rows("SELECT density from
> samples WHERE name = 'br1991a'")[0][0]
>     assert_equal "float", connection.raw_connection.query("SHOW FIELDS
> FROM samples").all_hashes.select{|field| field["Field"] ==
> 'density'}.first["Type"]
>   end
> end
>
> And here's the same for jruby:
>
> SPEC = { :username => 'test', :password =>
> 'test', :database=>'test', :host=>'localhost'}
> require 'test/unit'
> require 'rubygems'
> require 'active_record'  ## For AR::ConnectionNotEstablished
>
> gem 'activerecord-jdbcmysql-adapter'
> require 'active_record/connection_adapters/jdbcmysql_adapter.rb'
>
> class TestPrecision < Test::Unit::TestCase
>
>   def test_jdbc_precision
>     connection = ActiveRecord::Base.send("mysql_connection", SPEC)
>     assert_equal 5.8, connection.select_rows("SELECT density from
> samples WHERE name = 'br1991a'")[0][0]
>   end
> end
>
>
> The MRI test passes but the output of the jruby test is:
>
>   1) Failure:
> test_jdbc_precision(TestPrecision) [problem_jruby.rb:16]:
> <5.8> expected but was
> <5.80000019073486>.
>
> 1 tests, 1 assertions, 1 failures, 0 errors
>
>
> Does anybody know what's going on?
>
> -Justin
>
>
--
With kind regards,
Uwe Kubosch
Kubosch Consulting
Norway
http://kubosch.no/


 « Return to Thread: Floating point imprecision in activerecord-jdbc-adapter?