在C ++中将float转换为int

时间:2017-06-12 12:21:14

标签: c++ math integer

我在谈论转换已存储整数值的浮点数(例如 10.0 ) 我需要这样做,因为我想创建一个反转给定整数的简单函数,它使用一行代码如下:ans += x % (int)pow(10, i);(%运算符需要两个参数都是整数,而pow返回一个双)

C ++对正确进行此转换感到不满意。对于pow(10, 4),我得到 9999 的值,这非常令人恼火。为什么会出现这种错误很明显,10 ^ 4必须存储为 9999.999999 ... 或类似的东西。我可以通过使用lround()函数来修复此错误,但这不是最佳解决方案,因为如果我忽略了类似的错误怎么办?

有没有办法在C ++中进行数学而不必担心这些琐事?如果没有,我应该选择哪种语言进行这样的计算?我在python中简要地使用了bigInt库。关于使用哪种语言和库来解决这个问题的任何建议都会非常有用。

1 个答案:

答案 0 :(得分:2)

在其他语言中,您可以使用类型来执行精确的数学运算,例如在C#中使用decimal,在Java中使用BigDecimal类型。所以这样的问题:

printf (" %.20f \n", 3.6);
--> 3.60000000000000008882

0.1 + 0.2
--> 0.30000000000000004

不会发生。

在C ++中,您可以使用例如:The GNU Multiple Precision arithmetic libraryBoost.MultiprecisionDecimalForCPP (header only)。肯定有更多的图书馆。

如果使用此类型,请记住它们比不准确的浮点类型慢。但是,如果你以金钱为例,这是必须的!