Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbc7f9af

Browse files
committed
Add print(float) to save space (VS double).
1 parent9fb5081 commitbc7f9af

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

‎cores/arduino/Print.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ size_t Print::print(unsigned long long n, int base)
129129
}
130130
}
131131

132+
size_tPrint::print(float n,int digits)
133+
{
134+
returnprintFloat(n, digits);
135+
}
136+
132137
size_tPrint::print(double n,int digits)
133138
{
134139
returnprintFloat(n, digits);
@@ -221,6 +226,13 @@ size_t Print::println(unsigned long long num, int base)
221226
return n;
222227
}
223228

229+
size_tPrint::println(float num,int digits)
230+
{
231+
size_t n =print(num, digits);
232+
n +=println();
233+
return n;
234+
}
235+
224236
size_tPrint::println(double num,int digits)
225237
{
226238
size_t n =print(num, digits);
@@ -406,6 +418,58 @@ size_t Print::printULLNumber(unsigned long long n64, uint8_t base)
406418
return bytes;
407419
}
408420

421+
size_tPrint::printFloat(float number,uint8_t digits)
422+
{
423+
size_t n =0;
424+
425+
if (isnan(number)) {
426+
returnprint("nan");
427+
}
428+
if (isinf(number)) {
429+
returnprint("inf");
430+
}
431+
if (number >4294967040.0) {
432+
returnprint("ovf");// constant determined empirically
433+
}
434+
if (number < -4294967040.0) {
435+
returnprint("ovf");// constant determined empirically
436+
}
437+
438+
// Handle negative numbers
439+
if (number <0.0) {
440+
n +=print('-');
441+
number = -number;
442+
}
443+
444+
// Round correctly so that print(1.999, 2) prints as "2.00"
445+
float rounding =0.5;
446+
for (uint8_t i =0; i < digits; ++i) {
447+
rounding /=10.0;
448+
}
449+
450+
number += rounding;
451+
452+
// Extract the integer part of the number and print it
453+
unsignedlong int_part = (unsignedlong)number;
454+
float remainder = number - (float)int_part;
455+
n +=print(int_part);
456+
457+
// Print the decimal point, but only if there are digits beyond
458+
if (digits >0) {
459+
n +=print('.');
460+
}
461+
462+
// Extract digits from the remainder one at a time
463+
while (digits-- >0) {
464+
remainder *=10.0;
465+
unsignedint toPrint = (unsignedint)remainder;
466+
n +=print(toPrint);
467+
remainder -= toPrint;
468+
}
469+
470+
return n;
471+
}
472+
409473
size_tPrint::printFloat(double number,uint8_t digits)
410474
{
411475
size_t n =0;

‎cores/arduino/Print.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class Print {
3737
size_tprintNumber(unsignedlong,uint8_t);
3838
size_tprintULLNumber(unsignedlonglong,uint8_t);
3939
size_tprintFloat(double,uint8_t);
40+
size_tprintFloat(float,uint8_t);
4041
protected:
4142
voidsetWriteError(int err =1)
4243
{
@@ -86,6 +87,7 @@ class Print {
8687
size_tprint(unsignedlong,int = DEC);
8788
size_tprint(longlong,int = DEC);
8889
size_tprint(unsignedlonglong,int = DEC);
90+
size_tprint(float,int =2);
8991
size_tprint(double,int =2);
9092
size_tprint(const Printable &);
9193

@@ -100,6 +102,7 @@ class Print {
100102
size_tprintln(unsignedlong,int = DEC);
101103
size_tprintln(longlong,int = DEC);
102104
size_tprintln(unsignedlonglong,int = DEC);
105+
size_tprintln(float,int =2);
103106
size_tprintln(double,int =2);
104107
size_tprintln(const Printable &);
105108
size_tprintln(void);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp