C++ 将有理数转换为整数

C++ 将有理数转换为整数,c++,integer,decimal,digits,rational-numbers,C++,Integer,Decimal,Digits,Rational Numbers,如何将有理数(如1.24234或45.314)转换为整数(如124234或45314),同时获得小数位数?转换为字符串 找到小数点的位置 从上面字符串的长度中减去小数位数 然后从字符串中取出该点。inti=0; int i=0; float a = 1.24234; for(i; i<20; i++){ float b=pow(10,i); if((a*b)%10==0) break; } int c = pow(10,i-1); int result =

如何将有理数(如
1.24234
45.314
)转换为整数(如
124234
45314
),同时获得小数位数?

转换为字符串

找到小数点的位置

从上面字符串的长度中减去小数位数

然后从字符串中取出该点。

inti=0;
int i=0;
float a = 1.24234;

for(i; i<20; i++){
    float b=pow(10,i);
    if((a*b)%10==0)
        break;
}
int c = pow(10,i-1);
int result = a*c;
浮点数a=1.24234; 对于(i;i,如果您的数字是W.D(整十进制)

要得到W,只需做(int)W.D。 要得到D,你可以做W.D-(int)W.D

现在你的整数和小数点分开了。要计算出你的W上的x10乘数,请将D除以10,直到得到小于10的结果

现在:WxN+D (其中N是您除以10的次数)


注意:我没有将代码作为示例编写,因为我觉得这可能是一个家庭作业。另外,如果您使用的是很长的(即:精确浮点)这不起作用,可能会溢出。在实现类似的操作之前,请检查您的边界。

简单算法:删除小数点…@fpiro07在这种情况下,您的问题甚至没有意义。您不能说
1.234
实际上是
1.234
,因为不能保证它可以由
float
。它也可能是
1.233999374
45.314
不是十进制数
43.314
,而是它的浮点近似值。尝试执行
char const*str=“43.314”
,然后对(char const*It=str;*It;++It){if(*It!=')std::cout@fpiro07正是Tony Hopkinson所回答的。如果您的输入是一个
双精度
,那么答案是“这个问题毫无意义”。
double
s是形式为x/2^n的有理数,其中
x
是一个整数(加上一些不寻常的状态,如
NaN
和无穷大和
-0
。它们不是
12.345
形式的数字-
12.345
没有表示为
double
,只有近似值。你可以近似一个答案,但这仅仅是一个近似值。误解了这条线索这是很多很多问题。这就是我所说的。这基本上是坏的。嗯,很昂贵,还有一个测试来确保值>=1是好的