C 两位数分开

C 两位数分开,c,floating-point,decimal,C,Floating Point,Decimal,我尝试将任意数量的两个数字分开,得到两个不同变量的结果。我对一个特定的号码有问题:23 int root = 23; float div = (float)root/10.0; // div = 23.0/10.0 = 2.3 int left = (int)div; // left = 2 int right = ((float)div - (float)left) * 10.0; // right = (2.3 - 2) * 10.0 = 0.3 * 10.0 = 3 printf("%

我尝试将任意数量的两个数字分开,得到两个不同变量的结果。我对一个特定的号码有问题:
23

int root = 23;
float div = (float)root/10.0; // div = 23.0/10.0 = 2.3

int left = (int)div; // left = 2
int right = ((float)div - (float)left) * 10.0; // right = (2.3 - 2) * 10.0 = 0.3 * 10.0 = 3

printf("%d", right); // 2, why ?

有很多浮点到整数的运算,我对最终的结果遇到了一些麻烦。我错过了或没有抓住什么吗?

因为0.3可能不是用二进制表示的,所以最终得到了2.9999…当转换为
int
时,它变成了
2

相反:

int root = 23;
int left = root / 10;
int right = root % 10;

由于0.3可能无法准确地用二进制表示,因此当转换为
int
时,最终会得到2.9999…变成
2

相反:

int root = 23;
int left = root / 10;
int right = root % 10;

OMG,
a=root/10;b=根%10我稍微记得我遇到了一个类似的问题,通过将第二个数字转换为10.0有时会被解释为int来解决,因此请尝试重写:
float div=(float)root/(float)10.0;/div=23.0/10.0=2.3
作为旁注-通常最好避免浮动,因为它们不是precise@pytomaniaq你正在回忆一个不同的问题。这里的问题不是一个整数除法被应用于程序员想要的浮点1.OMG,
a=root/10;b=根%10我稍微记得我遇到了一个类似的问题,通过将第二个数字转换为10.0有时会被解释为int来解决,因此请尝试重写:
float div=(float)root/(float)10.0;/div=23.0/10.0=2.3
作为旁注-通常最好避免浮动,因为它们不是precise@pytomaniaq你正在回忆一个不同的问题。这里的问题不是一个整数除法被应用在程序员想要浮点除法的地方。这就是我想要的解释<因此,代码>%
是解决方案。谢谢这就是我想要的解释<因此,代码>%
是解决方案。谢谢