int FatFile::printField(float value, char term, uint8_t prec) { char buf[24]; char* str = &buf[sizeof(buf)]; if (term) { *--str = term; if (term == '\n') { *--str = '\r'; } } str = fmtFloat(value, str, prec); return write(str, buf + sizeof(buf) - str); }
//------------------------------------------------------------------------------ int StdioStream::printDec(float value, uint8_t prec) { #define FLOAT_NEW_WAY #ifdef FLOAT_NEW_WAY char buf[24]; char *ptr = fmtFloat(value, buf + sizeof(buf), prec); // return fputs(ptr); // uint8_t len = buf + sizeof(buf) - ptr; return write(ptr, buf + sizeof(buf) - ptr); #else char* ptr; uint8_t rtn = 0; uint8_t sign = 0; if (value < 0) { value = -value; sign = '-'; } // check for NaN INF OVF if (isnan(value)) { if (fputs_P(PSTR("nan")) < 0) { return -1; } rtn += 3; } else if (isinf(value)) { if (fputs_P(PSTR("inf")) < 0) { return -1; } rtn += 3; } else if (value > 4294967040.0) { if (fputs_P(PSTR("ovf")) < 0) { return -1; } rtn += 3; } else { if (sign) { if (putc(sign) < 0) { return -1; } rtn++; } if (prec > 9) { prec = 9; } /* uint32_t s = 1; for (uint8_t i = 0; i < prec; i++) { // s *= 10; s = ((s << 2) + s) << 1; } // round value value += 0.5/s; */ value += scale10(0.5, -prec); uint32_t whole = value; int np; if ((np = printDec(whole)) < 0) { return -1; } rtn += np; if (prec) { if (putc('.') < 0) { return -1; } char* str = fmtSpace(prec); if (!str) { return -1; } char* tmp = str - prec; // uint32_t fraction = s*(value - whole); uint32_t fraction = scale10(value - whole, prec); ptr = fmtDec(fraction, str); while (ptr > tmp) { *--ptr = '0'; } rtn += prec + 1; } } return rtn; #endif }