a new printFloat that probably works
This commit is contained in:
parent
f0843db46e
commit
a7c13c497a
17
print.c
17
print.c
@ -26,6 +26,8 @@
|
|||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
|
||||||
|
#define DECIMAL_PLACES 4
|
||||||
|
|
||||||
void printString(const char *s)
|
void printString(const char *s)
|
||||||
{
|
{
|
||||||
while (*s)
|
while (*s)
|
||||||
@ -70,15 +72,20 @@ void printInteger(long n)
|
|||||||
printIntegerInBase(n, 10);
|
printIntegerInBase(n, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This is nasty. I can't remember where I got this, but this monster
|
// A very simple
|
||||||
// will truncate leading zeroes from the fractional part so that
|
|
||||||
// 3.5, 3.05 and 3.000005 all will print as 3.5!!! Needs fixing fast.
|
|
||||||
void printFloat(double n)
|
void printFloat(double n)
|
||||||
{
|
{
|
||||||
double integer_part, fractional_part;
|
double integer_part, fractional_part, decimal_part;
|
||||||
fractional_part = modf(n, &integer_part);
|
fractional_part = modf(n, &integer_part);
|
||||||
printInteger(integer_part);
|
printInteger(integer_part);
|
||||||
serial_write('.');
|
serial_write('.');
|
||||||
printInteger(round(fractional_part*1000));
|
fractional_part *= 10;
|
||||||
|
int decimals = DECIMAL_PLACES;
|
||||||
|
while(decimals > 0) {
|
||||||
|
decimal_part = floor(fractional_part);
|
||||||
|
printDigit(decimal_part);
|
||||||
|
fractional_part -= decimal_part;
|
||||||
|
fractional_part *= 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user