【发布时间】:2012-12-17 22:31:54
【问题描述】:
如何将1.24234 或45.314 等有理数转换为124234 或45314 等整数,同时获得小数位数?
【问题讨论】:
-
简单算法:去掉小数点...
-
@fpiro07 在这种情况下,您的问题甚至没有意义。你不能说
1.234真的是1.234,因为不能保证它可以用float精确表示。也可能是1.23399999374... -
45.314不是十进制数43.314,而是它的浮点近似值。尝试执行char const* str = "43.314";,然后执行for(char const* it=str; *it; ++it) { if (*it != '.') std::cout << *it; }以获取有效方法的示例。但是,这在很大程度上取决于您的输入格式。 -
@fpiro07 正是托尼·霍普金森的回答。
-
如果您的输入是
double,则答案是“这个问题没有意义”。doubles 是 x/2^n 形式的有理数,其中x是整数(加上一些不寻常的状态,例如NaN和无穷大和-0。它们不是12.345形式的数字-- 没有将12.345表示为double,只有近似值。你可以近似一个答案,但这只是一个近似值。误解这一点会导致很多很多问题。
标签: c++ integer decimal digits rational-numbers