Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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
如何在python中使用三角函数修复浮点错误_Python_Python 3.x_Math_Precision_Discord.py Rewrite - Fatal编程技术网

如何在python中使用三角函数修复浮点错误

如何在python中使用三角函数修复浮点错误,python,python-3.x,math,precision,discord.py-rewrite,Python,Python 3.x,Math,Precision,Discord.py Rewrite,我正在使用discord.py库制作一个discord机器人,目前正在使用计算器功能。在尝试完成正弦、余弦和tan函数时,我遇到了许多浮点错误。我在网上浏览了一下,但没有找到任何可以理解的东西,我想知道如何修复它 我知道我可以将结果四舍五入到1 D.p.但是,我希望将相对精确的数字保留到小数点后几位(如5)。我一直在尝试使用“十进制”库来修复它,尽管我运气不好 在discord上运行这些命令会导致响应: “r-计算正弦30”->“0.4999999999999944488848768742172

我正在使用discord.py库制作一个discord机器人,目前正在使用计算器功能。在尝试完成正弦、余弦和tan函数时,我遇到了许多浮点错误。我在网上浏览了一下,但没有找到任何可以理解的东西,我想知道如何修复它

我知道我可以将结果四舍五入到1 D.p.但是,我希望将相对精确的数字保留到小数点后几位(如5)。我一直在尝试使用“十进制”库来修复它,尽管我运气不好

在discord上运行这些命令会导致响应:

“r-计算正弦30”->“0.49999999999999444888487687421729788818416595458984375”

“r-计算余弦60”->“0.5000000000000001102230246251565404236316680908203125”

我有密码:

从十进制输入十进制为dec
@commands.command(name=“calculator”,
别名=[“计算”],
description=“多功能计算器,满足您的所有数学需求。”,
brief=“一个广泛的计算器”,
用法=”)
异步def计算器(自身、ctx、模式,*数字:dec):
数学命令执行器(ctx)
mode=mode.lower()
答案=12月(0)
尝试:
...
如果模式==“正弦”或模式==“正弦”:
答案=dec(数学sin(dec(数字[0])*dec(数学pi)/dec(180)))
elif模式==“cos”或模式==“cosine”:
答案=dec(数学cos(dec(数字[0])*dec(数学pi)/dec(180)))
elif模式==“tan”或模式==“tangent”:
答案=dec(数学tan(dec(数字[0])*dec(数学pi)/dec(180)))
例外情况除外,例如:
等待ctx.send(f“Error:{str(ex)}”)
答案=十二月(答案)
等待ctx.send(f“答案:\n{str(答案)}”)

请帮助。

为什么不使用
sin(dec())
?@Pencilcaseman,因为math.sin(x)需要以弧度为单位的角度,但为了简单起见,我希望输入以度为单位。因此,我必须将输入转换为弧度。您使用的是浮点正弦和余弦函数,因此无论输入是什么,输出都将是浮点,但是请记住,正弦和余弦的结果大多是非理性的,所以你仍然会失去精度。我已经试过了,就像你说的,我仍然不能得到精确的结果。我想如果不舍入,就没有办法使它精确,所以我就这样做。无论如何,谢谢。问题不在于正弦和余弦,而在于
math.py
的精度。请参阅我的答案,了解更多解释为什么不使用
sin(dec())
?@Pencilcaseman,因为math.sin(x)需要以弧度为单位的角度,但为了简单起见,我希望输入以度为单位。因此,我必须将输入转换为弧度。您使用的是浮点正弦和余弦函数,因此无论输入是什么,输出都将是浮点,但是请记住,正弦和余弦的结果大多是非理性的,所以你仍然会失去精度。我已经试过了,就像你说的,我仍然不能得到精确的结果。我想如果不舍入,就没有办法使它精确,所以我就这样做。无论如何,谢谢。问题不在于正弦和余弦,而在于
math.py
的精度。更多解释请参见我的答案