Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中将浮点转换为int+;_C++_Math_Integer - Fatal编程技术网

C++ 在C+中将浮点转换为int+;

C++ 在C+中将浮点转换为int+;,c++,math,integer,C++,Math,Integer,我说的是转换已经存储整数值的浮点(如10.0) 我之所以需要这样做,是因为我想创建一个简单的函数来反转给定的整数,它使用一行类似这样的代码:ans+=x%(int)pow(10,I)(%运算符需要两个参数都是整数,pow返回双精度) C++不太乐意正确地进行这种转换。对于pow(10,4),我得到了一个9999的值,这非常令人恼火。发生此错误的原因很明显,10^4必须存储为9999.999999…或类似内容。我可以通过使用lrund()函数来修复此错误,但这将是一个不太理想的解决方案,因为如果我

我说的是转换已经存储整数值的浮点(如10.0) 我之所以需要这样做,是因为我想创建一个简单的函数来反转给定的整数,它使用一行类似这样的代码:
ans+=x%(int)pow(10,I)(%运算符需要两个参数都是整数,pow返回双精度)

C++不太乐意正确地进行这种转换。对于
pow(10,4)
,我得到了一个9999的值,这非常令人恼火。发生此错误的原因很明显,10^4必须存储为9999.999999…或类似内容。我可以通过使用
lrund()
函数来修复此错误,但这将是一个不太理想的解决方案,因为如果我忽略类似的错误怎么办


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

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

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

不会发生

在C++中,你可以使用例如:当然还有更多的图书馆


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

lround
似乎正是您所需要的-为什么您说它“不太理想”?了解一下:当涉及到浮点精度时,在大多数其他语言中都会遇到类似的问题。@AayushMahajan二进制浮点数在绝大多数情况下不能准确表示十进制浮点数。所以你有3个选择:(1)放弃浮点运算,使用多精度整数运算,(2)了解什么是二进制浮点运算,并确定它是否满足你的需要,(3)使用第三方多精度(大数字)库,“如果我忽略了类似的错误怎么办?”你怎么能忽略它?您必须在
int
中插入一个显式强制转换,所以只需训练自己进行四舍五入而不是强制转换。不会再慢了。那个看起来简单的演员不是免费的。
0.1 + 0.2
--> 0.30000000000000004