Принудительное округление при конвертации float to constant char*

При попытке записать float на Sd карту принудительно округляет до 1-2 знаков после запятой, хотя размер буфера поставил 100(точно должно хватить)

Почему округляет так и не нашел, по плану нет его нигде в коде

    writeFile(SD, "/hello.txt", "37.8789878978 ");
    appendFile(SD, "/hello.txt", "World!\n");

    float nime = 37.4976767;
    String stringVar=String(nime);
char charVar[100];
stringVar.toCharArray(charVar, 100 );
 appendFile(SD, "/hello.txt", charVar);

А это функция, которой записываю(она из встроенной библиотеки)

void appendFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

используй dtostrf(…)

А округляется вот здеся, неявно.

У String памойму в контрукторе можно задать число цифр после точки (больше 6 задавать бессмысленно)
Ну и вопросы правильно задавай, у тебя float конвертируется не в const char *, а в String.

float имеет размерность 6-7 цифр вместе с мантиссой

так и есть

2 лайка

штош, я так и знал. :slight_smile:

2 лайка

И зачем Вы её привели? Она-то чем виновата?

Вам было трудно в первом коде после строки №5 вставить вывод stringVar в Serial и убедиться, что она уже там “округлилась”? Просто вставить печать и посмотреть? Вы думаете, это кто-то за Вас будет делать?

Не жди, что кто-то сделает тебя счастливым, налей себе сам” (приписывают А. Ширвиндту).

1 лайк