我需要将一个数字的小数部分分解为个位数,但我需要得到最明显的表示方式。以下是我的代码,为了更清晰:
我需要的输出是:
但是我得到了:
我很愿意寻找更好的方法,您有什么建议吗?
#include <stdio.h>
void main(){
double value = 0.123;
int decim_tab[6];
int decimal;
int i;
for (i = 0; i < 6; ++i) {
value *= 10;
decimal = (int)value;
decim_tab[i] = decimal;
value -= decimal;
}
for (i = 0; i < 6; ++i)
print("%d\n", decim_tab[i]);
}
我需要的输出是:
1
2
3
0
0
0
但是我得到了:
1
2
2
9
9
9
编辑
我找到的解决方案是为值添加一个小偏移量,以强制使用最短的表示方式:
#include <stdio.h>
void main(){
double value = 0.123;
int decim_tab[6];
int decimal;
int i;
value += 0.000000001
for (i = 0; i < 6; ++i) {
value *= 10;
decimal = (int)value;
decim_tab[i] = decimal;
value -= decimal;
}
for (i = 0; i < 6; ++i)
print("%d\n", decim_tab[i]);
}
我很愿意寻找更好的方法,您有什么建议吗?
sprintf()
然后分析生成的字符串怎么样? - Roman Hockevalue += 0.000000001
方案并不可行,它会破坏其他本来不会出现问题的数字。你的问题在于将十进制浮点文字转换为二进制浮点数时,从来都无法完全精确地转换。如果你需要完美的分解,就不能使用浮点数类型。 - user694733