float как убрать знак минус перед нулем

3d_killer
Offline
Зарегистрирован: 13.06.2018

В результатах операций с float появляется отрицательный ноль, как на отображении это убрать?

b707
Онлайн
Зарегистрирован: 26.05.2017

3d_killer пишет:

В результатах операций с float появляется отрицательный ноль, как на отображении это убрать?

много раз писал - в МК в 99% флоат не нужен. Домножьте свой флоат на 100 или 1000 и работайте с ним как с целым.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Если использование float принципиально , то можно так:

float float2display;
if(myFloat<0)float2display=myFloat*-1;
else float2display=myFloat;

Ну и на вывод отправлять float2display

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

3d_killer пишет:

В результатах операций с float появляется отрицательный ноль, как на отображении это убрать?

Вам не кажется, что это зависит от того, как именно Вы его отображаете? Пока "ХЗ как". Значит, и убирать "ХЗ-как".

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Кстати - в своё время меня так некисло удивило, что ноль в вещественном представлении чисел может иметь знак :) Нечистый ноль, некошерный :)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Моя первая машина была М220 - там у любого числа был знак, абсолютно :-)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

3d_killer пишет:

В результатах операций с float появляется отрицательный ноль, как на отображении это убрать?

Отображать модуль числа.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
3d_killer
Offline
Зарегистрирован: 13.06.2018

в таком случае отрицательные значения тоже не показываются

3d_killer
Offline
Зарегистрирован: 13.06.2018

Kakmyc пишет:

Если использование float принципиально , то можно так:

float float2display;
if(myFloat<0)float2display=myFloat*-1;
else float2display=myFloat;

Ну и на вывод отправлять float2display

в таком случае отрицательные значения тоже не показываются

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

3d_killer пишет:

в таком случае отрицательные значения тоже не показываются

вы читали текст по ссылке, что я вам привёл?

b707
Онлайн
Зарегистрирован: 26.05.2017

3d_killer пишет:

в таком случае отрицательные значения тоже не показываются

ну я же вам написал решение выше - выкиньте флоат, работайте с целым. В целом представлении ноль не имеет знака.

3d_killer
Offline
Зарегистрирован: 13.06.2018

а перед выводом делить что ли?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

3d_killer пишет:

а перед выводом делить что ли?

Например, да, делить.

b707
Онлайн
Зарегистрирован: 26.05.2017

3d_killer пишет:

а перед выводом делить что ли?

нет, если делить - будут ровно те же проблемы с отрицательным нулем, что и раньше. Вообще выкидываешь флоат. Совсем.

А перед выводом просто определяешь положение точки в числе и выводишь тремя порциями - целое до точки, потом точку как символ и сотые после точки тоже как целое число

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

b707 пишет:

нет, если делить - будут ровно те же проблемы с отрицательным нулем, что и раньше. 

Ну тут ты не совсем прав. Покажи мне - где тут проблемы с отрицательным нулём - делим же? Вводные: храним температуру в int16_t, с точностью два знака после запятой:

int16_t myTemp = -1234; // -12.34 градуса

int16_t whole = myTemp/100;
uint16_t fract = abs(myTemp%100);

Serial.print(whole);
Serial.print('.');
if(fract < 10)
	Serial.print('0');
Serial.println(fract);

Нету проблемы ;)