BCD :
52.1 = 521 * 10 ^ -1 => 0x1521
1.25 = 125 * 10 ^ -2 => 0x2125
0.0000000000000001 999. , , , , 0.0000000001 999000000.
, , . - . ( != .)
public static short Encode(double value) {
int cnt = 0;
while (value != Math.Floor(value)) {
value *= 10.0;
cnt++;
}
return (short)((cnt << 12) + (int)value);
}
public static double Decode(short value) {
int cnt = value >> 12;
double result = value & 0xfff;
while (cnt > 0) {
result /= 10.0;
cnt--;
}
return result;
}
:
Console.WriteLine(Encode(52.1));
Console.WriteLine(Decode(4617));
:
4617
52.1