我被要求完成一项任务,以准确地打印出输入中的浮点数。所以基本上如果输入是 1.1 2.2 3.3 4.4,那么我的输出必须恰好是 1.1 2.2345678 3.3 4.4
这是我的代码:
void count_digits(double num) {
int decimal_whole_part;
double decimal;
//char character;
int final_value;
decimal = num - (int)num;
printf(" %d", (int)(num));
printf(".");
do{
decimal_whole_part = (int)(decimal);
decimal -= decimal_whole_part;
decimal*=10;
final_value = (int)(decimal);
printf("%c", (char)((decimal+32+16)));
} while((double)(final_value) != (double)(decimal));
}
我尝试使用浮点数,但它会导致尾随零,例如 1.100000 2.2345678000000...... 等等(请忽略不一致的零,它们在输出中是一致的)。我不能使用 %g、sprintf 或截断浮动。特别是,我无法使用格式说明符,因为输入浮点数的长度不一致。
我尝试将小数点之前和小数点之后的部分分开,将小数点之后的部分转换为ascii代码,并向其添加特定值以获取字符串形式的数字(抱歉英语不好)。我再次这样做是因为这项具有挑战性的任务涉及不使用 sprintf 和 %g。
我的输入:1.11111 2.023 3.043 我的输出: 1.111110000000000042064129956997931003570556640625 2.023000000000000131450406115618534386157989501953125 3.0430000000000 001492139745096210390329360961914062 所需输出:1.11111 2.023 3.043
(请忽略换行符,文本框中空间不足)。
有人可以告诉我如何正确结束循环并获得所需的输出吗?谢谢。
数字是一个抽象的数学实体,例如十。每个数字有多种表示方式。例如,十可以表示为“十”、“10”、“10.00”和“1•101”。
A
float
、double
、int
或其他 C 算术类型仅表示数学值。它不存储有关数字如何表示的信息。
因此,不可能从 C 算术类型可靠地重建数字的原始表示。特别是,您无法区分“1.1”和“1.100000”。
要记住输入形式,您应该将输入记录为字符串。为输入中的每个数字创建一个字符数组,并将输入项的字符存储在数组中。用空字符标记结尾(或记住长度)。