【发布时间】:2014-01-30 01:22:44
【问题描述】:
我有一个双(或浮点)数 x:
x = 1234.5678;
现在,问题是,如何将数字分解为 2 个整数,而 int1 将获得该点之前的数字,而 int2 是该点之后的数字。
第一部分很简单,我们可以进行强制转换,或者使用圆形或天花板将第一部分转换为 int,我正在寻找第二部分成为 int2=5678 而不存在任何浮点数。
即来扩展上面的例子:
float x = 1234.5678;
int x1 = (int) x; // which would return 1234 great.
int x2 = SomeFunction????(x); // where I need x2 to become = 5678
注意 5678 不应该有任何点。
很高兴收到您的来信。
谢谢 海德
【问题讨论】:
-
@olevegard - 对。但是您必须提前定义此方案所需的小数位数。您不能一次返回 6 位小数,下一次返回 12 位。
-
计算机在 x 中存储接近 1234.5677490234375 的东西,所以它应该给 5677490234375 吗?更长的时间?
-
(1) 问题指定不正确,因为它说您有 1234.5678 在双精度或浮点数中,但这在双精度或浮点数的常见实现中是不可能的。常见的实现使用基于二进制的浮点,不会精确存储 1234.5678。 (2) 另外,普通的浮点实现没有足够的精度来存储 1234.5678 没有特别的努力;最接近的可表示值更接近 1234.5677。 (3) 问题没有充分说明,因为它没有说明对于 3.25 或 7.53125 等数字应返回多少位。
-
即使你有一个罕见的使用十进制而不是二进制算术的 C++ 实现,你如何区分 1.04 和 1.4?
-
@HotLicks:表示 1234.5678 到 0.00001 的准确度与表示 1234.5678 不同。问题陈述必须指定给定实际输入的预期结果,而不是希望但不存在的输入。例如,它可以指定所需的结果是将实际输入四舍五入到小数点后四位小数的最接近数字的四位数字。
标签: c++ floating-point int decimal-point