Hi - I have a float variable that I'd like to keep to 3 decimal places, but I've noticed that when I save it to a text file with SPIFFs and load it again, it only has the first 2 decimal places.
I will paste the relevant sequence here:
the variable in question:
float gauge = 0;
the spiffs write function (fills 11 lines of a text file, the float variable is line 6):
void writeFile() {
String fileLoader1 = String(loadChoice);
String fileLoader2 = String ( "/save" + fileLoader1 + ".txt");
File f = SPIFFS.open(fileLoader2, "w");
if (!f) {
Serial.println("file open failed");
}
Serial.println("=======Save File=======");
for (int i=1; i<12; i++){
if (i == 1) {
f.print(fileWriteDel);
f.print(",");
f.print(loadChoice);
f.print('\n');
};
if (i == 2) {
f.print(pickupName);
f.print('\n');
};
if (i == 3) {
f.print(RPMs);
f.print('\n');
};
if (i == 4) {
f.print(bobbinPlate);
f.print('\n');
};
if (i == 5) {
f.print(bobbinSpace);
f.print('\n');
};
if (i == 6) {
f.print(gauge);
f.print('\n');
};
if (i == 7) {
if (dirCW == true) {
f.print("true");
f.print('\n');
} else {
f.print("false");
f.print('\n');
};
};
if (i == 8) {
for (int i = 0; i < 20; i ++) {
f.print(blockNum[i]);
f.print(",");
};
f.print('\n');
};
if (i == 9) {
for (int i = 0; i < 20; i ++) {
f.print(blockArea[i]);
f.print(",");
};
f.print('\n');
};
if (i == 10) {
for (int i = 0; i < 20; i ++) {
f.print(blockStrafe[i]);
f.print(",");
};
f.print('\n');
};
if (i == 11) {
for (int i = 0; i < 20; i ++) {
f.print(blockWinds[i]);
f.print(",");
};
f.print('\n');
};
};
f.close();
};
And here's the SPIFFs load function - the lines are strings when initially parsed, so .toFloat is used on the string. I'm not sure if it's losing the third decimal on save or load.
void loadFile() {
String fileLoader1 = String(loadChoice);
String fileLoader2 = String ( "/save" + fileLoader1 + ".txt") ;
File f = SPIFFS.open(fileLoader2, "r");
if (!f) {
Serial.println("file open failed");
} Serial.println("=======Load Save=======");
for (int i=1; i<12; i++){
String s=f.readStringUntil('\n');
if (i==1) {
Serial.println("saveStat / saveBlock");
s.toCharArray(c,200);
int result = sscanf(c, "%i,%i", &saveStat, &saveBlock);
Serial.println(saveStat);
Serial.println(saveBlock);
}; // line 1 saveStat / saveBlock
if (i==2) {
Serial.println("PICKUP NAME");
pickupName = s;
Serial.println(pickupName);
}; // line 2 PICKUP NAME
if (i==3) {
Serial.println("RPMs");
RPMs = s.toInt();
Serial.println(RPMs);
}; // line 3 RPMs
if (i==4) {
Serial.println("bobbinPlate");
bobbinPlate = s.toFloat();
Serial.println(bobbinPlate);
}; // line 4 bobbinPlate
if (i==5) {
Serial.println("bobbinSpace");
bobbinSpace = s.toFloat();
Serial.println(bobbinSpace);
}; // line 5 bobbinSpace
if (i==6) {
Serial.println("gauge");
gauge = s.toFloat();
Serial.println(gauge);
}; // line 6 gauge
if (i==7) {
Serial.println("dirCW");
if (s >= "true") {
dirCW = true;
Serial.println("true");
} else {
dirCW = false;
Serial.println("false");
}
Serial.println(s);
}; // line 7 dirCW
if (i==8) {
Serial.println("BLOCK NUMBERS");
s.toCharArray(c,200);
int result = sscanf(c, "%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", &blockNum[0], &blockNum[1] ,&blockNum[2], &blockNum[3], &blockNum[4], &blockNum[5], &blockNum[6] ,&blockNum[7], &blockNum[8], &blockNum[9], &blockNum[10], &blockNum[11] ,&blockNum[12], &blockNum[13], &blockNum[14], &blockNum[15], &blockNum[16] ,&blockNum[17], &blockNum[18], &blockNum[19]);
for (int i=0; i<20; i++){
Serial.print(blockNum[i]);
Serial.print(",");
}
}; // line 8 BLOCK NUMBERS
if (i==9) {
Serial.println("");
Serial.println("BLOCK AREA");
s.toCharArray(c,200);
int result = sscanf(c, "%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", &blockArea[0], &blockArea[1] ,&blockArea[2], &blockArea[3], &blockArea[4], &blockArea[5], &blockArea[6] ,&blockArea[7], &blockArea[8], &blockArea[9], &blockArea[10], &blockArea[11] ,&blockArea[12], &blockArea[13], &blockArea[14], &blockArea[15], &blockArea[16] ,&blockArea[17], &blockArea[18], &blockArea[19]);
for (int i=0; i<20; i++){
Serial.print(blockArea[i]);
Serial.print(",");
}
}; // line 9 blockArea
if (i==10) {
Serial.println("");
Serial.println("BLOCK STRAFE");
s.toCharArray(c,200);
int result = sscanf(c, "%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", &blockStrafe[0], &blockStrafe[1] ,&blockStrafe[2], &blockStrafe[3], &blockStrafe[4], &blockStrafe[5], &blockStrafe[6] ,&blockStrafe[7], &blockStrafe[8], &blockStrafe[9], &blockStrafe[10], &blockStrafe[11] ,&blockStrafe[12], &blockStrafe[13], &blockStrafe[14], &blockStrafe[15], &blockStrafe[16] ,&blockStrafe[17], &blockStrafe[18], &blockStrafe[19]);
for (int i=0; i<20; i++){
Serial.print(blockStrafe[i]);
Serial.print(",");
}
}; // line 10 blockStrafe
if (i==11) {
Serial.println("");
Serial.println("BLOCK WINDS");
s.toCharArray(c,200);
int result = sscanf(c, "%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", &blockWinds[0], &blockWinds[1] ,&blockWinds[2], &blockWinds[3], &blockWinds[4], &blockWinds[5], &blockWinds[6] ,&blockWinds[7], &blockWinds[8], &blockWinds[9], &blockWinds[10], &blockWinds[11] ,&blockWinds[12], &blockWinds[13], &blockWinds[14], &blockWinds[15], &blockWinds[16] ,&blockWinds[17], &blockWinds[18], &blockWinds[19]);
for (int i=0; i<20; i++){
Serial.print(blockWinds[i]);
Serial.print(",");
}
}; // line 11 blockWinds
}
f.close();
blockCounter();
}
Any thoughts would be helpful!