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....