【发布时间】:2016-02-09 00:32:43
【问题描述】:
我在尝试输出十六进制数的小数部分时遇到了问题。
基本上,使用以下代码:
float d2h(float decimal, float fraction) {
int i = 0;
char hex[17] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', '\0' };
int temp = (int) decimal;
int j;
for (j = 0; j < 60; j++) {
fraction = fraction - (int) fraction;
displayFractionHex[j] = hex[(int) (fraction * 16)];
fraction *= 16;
}
for (i = sizeof(displayDecimalHex) - 1; i >= 0; i--) {
displayDecimalHex[i] = hex[temp % 16];
temp /= 16;
}
int n;
if ((n = strspn(displayDecimalHex, "0")) != 0
&& displayDecimalHex[n] != '\0') // strspn() - Reference
printf("%s", &displayDecimalHex[n]);
printf(".");
for (i = 0; i < 20; i++) {
printf("%c", displayFractionHex[i]);
}
}
我得到了输出222.74BC0000000000000000,我显然希望十六进制数的小数部分显示更多字符。
但是,当我尝试将最后一个 printf 语句更改为 %s 说明符而不是 %c 时,我的程序崩溃了。
我尝试将数组复制到另一个数组,但不幸的是无济于事。
【问题讨论】:
-
您的意见是什么?
displayFractionHex和displayDecimalHex声明在哪里? -
char displayDecimalHex[30], displayFractionHex[30]; -- 在代码的最顶部。
-
我的输入是一个浮点数,然后分成小数部分和小数部分
-
你传递了哪两个浮点数到这个函数来得到上面的输出,你期望的输出是什么?
-
好吧,我的输入是 546.456,因此十进制浮点数是 546,小数浮点数是 0.456
标签: c arrays char character limit