我需要分解一个数字的小数部分,但我需要得到最明显的表示。这里是我的代码,更清晰:
分解双精度小数部分
#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
编辑
解决方案n个I发现是小的增量,以迫使最短表示添加到值:
#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]);
}
我会很高兴找到一个更好的办法,有什么建议?
相关阅读:[?是浮点运算破(http://stackoverflow.com/q/588004/2305521) – fpg1503
如何使用'的sprintf()',然后分析结果字符串? –
您的'值+ = 0.000000001'解决方案不是解决方案。它会打破其他不会被破坏的数字。你的问题是,从*十进制*格式的浮点指针字面量转换为永远不能完全转换为*二进制*浮点数。如果你需要完美的分解,你不能使用浮点类型。 – user694733