Примечание: Я кодирую следующее в варианте Arduino C++.Извлечение десятичной части поплавка точно
Из заданного поплавка (всегда с четырьмя десятичными знаками), я хочу извлечь только десятичную часть («мантисса») в виде целого числа.
Так что я попытался этот метод:
void ExtractDecimalPart(float Value) {
int IntegerPart = (int)(Value);
int DecimalPart = 10000 * (Value - IntegerPart); //10000 b/c my float values always have exactly 4 decimal places
Serial.println (DecimalPart);
}
Но полученные результаты в следующем:
ExtractDecimalPart (1234.5677); //prints 5677
ExtractDecimalPart (1234.5678); //prints 5677
ExtractDecimalPart (1234.5679); //prints 5678
Обратите внимание, что последние два распечатывают неправильно; Я предполагаю, что это связано с проблемами точности с плавающей запятой.
Что такое экономичный способ решения вышеуказанного?
Возможно ли использование фиксированной точки? Какой диапазон вы хотите представить? Каковы размеры 'int',' long' и (если поддерживается) 'long long' в вашем компиляторе? Кроме того, поддерживает ли ваш компилятор 'stdint.h', и если да, то какой из них самый большой? – jerry