【发布时间】:2012-11-13 16:18:26
【问题描述】:
我正在尝试将十进制数转换为其分数。小数点后最多有 4 位数字。 例如:- 12.34 = 1234/100 12.3456 = 123456/10000
我的代码:-
#include <stdio.h>
int main(void) {
double a=12.34;
int c=10000;
double b=(a-floor(a))*c;
int d=(int)floor(a)*c+(int)b;
while(1) {
if(d%10==0) {
d=d/10;
c=c/10;
}
else break;
}
printf("%d/%d",d,c);
return 0;
}
但我没有得到正确的输出,十进制数只能是双精度的。请指导我应该怎么做。
【问题讨论】:
-
完全不要使用浮点数,而是使用定点整数,即让你的单位为 1/10000。
-
int d = (int)round(a * c);将是一个很好的起点。如果你只使用floor和截断,像12.34 = 12.339999999999999857891452847979962825775146484375这样的东西会让你大吃一惊。但我同意 Kerrek 的观点,你应该从一开始就使用整数。 -
One of my questions 被标记为与这个重复,即使它是关于 JavaScript,而不是 C。:/