Вот возможное решение:
typedef enum
{
DEC1 = 10,
DEC2 = 100,
DEC3 = 1000,
DEC4 = 10000,
DEC5 = 100000,
DEC6 = 1000000,
} tPrecision ;
void putFloat( float f, tPrecision p )
{
long i = (long)f ;
putLong( i ) ;
f = (f - i) * p ;
i = abs((long)f) ;
if( fabs(f) - i >= 0.5f )
{
i++ ;
}
putchar('.') ;
putLong( i ) ;
putchar('\n') ;
}
Вы бы использовали это так:
putFloat( 3.14159f, DEC3 ) ;
, который выведет «3.142», обратите внимание на округление до третьей цифры.
Если вам нужно только фиксированное количество десятичных знаков, вы можете покончить с аргументом точности и жестко закодировать его.
При использовании этой функции вы должны знать, что число с плавающей точкой имеет только 6 значащих цифр точности, а не шесть десятичных знаков . Поэтому, если вы попытаетесь напечатать, скажем, 123.456, используя DEC6, вы получите ошибочные цифры после третьего места. Любые цифры после 6-й значащей цифры следует игнорировать, но написание кода для учета этого может быть ненужным в вашем приложении или более дорогим, чем вы хотели бы, учитывая ваши ограничения.