我在谈论转换已存储整数值的浮点数(例如 10.0 )
我需要这样做,因为我想创建一个反转给定整数的简单函数,它使用一行代码如下:ans += x % (int)pow(10, i);
(%运算符需要两个参数都是整数,而pow返回一个双)
C ++对正确进行此转换感到不满意。对于pow(10, 4)
,我得到 9999 的值,这非常令人恼火。为什么会出现这种错误很明显,10 ^ 4必须存储为 9999.999999 ... 或类似的东西。我可以通过使用lround()
函数来修复此错误,但这不是最佳解决方案,因为如果我忽略了类似的错误怎么办?
有没有办法在C ++中进行数学而不必担心这些琐事?如果没有,我应该选择哪种语言进行这样的计算?我在python中简要地使用了bigInt库。关于使用哪种语言和库来解决这个问题的任何建议都会非常有用。
答案 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 library或Boost.Multiprecision或DecimalForCPP (header only)。肯定有更多的图书馆。
如果使用此类型,请记住它们比不准确的浮点类型慢。但是,如果你以金钱为例,这是必须的!