php - Laravel float variable changing value when adding to database -


theory

i have quite comprehensive coordinates list (latitude , longitude 7 decimal places), want continually add to. in order stop data duplication, each coordinate that's trying be inputted, want check database see if latitude , longitude exist, on same row.

check see if coordinates exist

 $coordinate = db::table('coordinates')             ->where('lat', '=', $geocode->getlatitude())             ->where('lng', '=', $geocode->getlongitude())             ->count(); 

migration

schema::create('coordinates', function(blueprint $table)         {             $table->increments('id');             $table->float('lat', 10, 7);             $table->float('lng', 10, 7);             $table->timestamps();         }); 

when user's address converted, have noticed when dd() latitude variable, comes out as:

float(53.7960957) code dd($geocode->getlatitude());

when try add afterwards database, removing dd(), actual decimal that's added database 53.7960968 - different location when we're talking coordinates!

why decimal changing echoing on screen, adding database?

do need convert float before adding? how can resolve this?

update:

i haven't used mysql in while, did more research. looks decimal type has ability precise 65 digits. since need 7 digits passed decimal , 3 before decimal, should have no problem creating schema decimal(10,7).

sql fiddle


assuming using mysql, there not can do. according the documentation, float , double types approximate representations:

the float , double types represent approximate numeric data values. mysql uses 4 bytes single-precision values , 8 bytes double-precision values.

also check out sql fiddle, you'll see mysql 5.5.32 represent float of 53.7960957 53.796100616455 , double of 53.7960957 53.7960957. may want update schema use doubles instead, more precision.

you can specify precision of float nonstandard syntax (so not recommended, portability other sql standards) using float(m,d) m total digits , d number of digits after decimal. instance, if want allow latitude/longitude values (-180 180) 7 digits of precision after decimal..you should able create table float(10,7). but, as you'll see, still wasn't precise double was.


Comments

Popular posts from this blog

commonjs - How to write a typescript definition file for a node module that exports a function? -

openid - Okta: Failed to get authorization code through API call -

thorough guide for profiling racket code -