EasyTransferI2C library lost data precision in float type. Why?

I fix my code

#include <Wire.h>

#include <LiquidCrystal.h>
LiquidCrystal lcd(10, 4, 5, 6, 7, 8);

void setup(){

  lcd.begin(16, 4);
  pinMode(9, OUTPUT);
  Serial.begin(9600) ;

}

void loop() 
{
  double a = 0.00000000;
  int val=0;
  long frac=0;
  double q=0;

  a=-180.123456;

  Serial.println(a,8);


  val=int(a);

  //????????
  if(val >= 0)
    frac = (a - int(a)) * 1000000;
  else
    frac = (int(a)- a ) * 1000000;

  //?????? 
  if (val>=0)
    q=(frac*0.000001)+val;
  else
    q=val+(-1*(frac*0.000001));


  lcd.setCursor(0,0);
  lcd.print(a,6);
  lcd.setCursor(0,1);
  lcd.print(val);
  lcd.setCursor(0,2);
  lcd.print(frac);
  lcd.setCursor(0,3);
  lcd.print(q,6);
}

Now it's working good. But i don't have any idea how to fix precision lost in last signs...
I have test data: -180.123456
But i see on LCD: -180.123458 - before disassembly
-180 - integer part - correct
123458 - factional part - wong
-180.123458 - assembled data - assembly correct, but fractional part wrong.

Any idea how i can fix that? I really need six signs precision....