问题描述
首先,双精度型的宽度与其可容纳的小数位数没有直接关系。双精度值是一个尾数和一个指数(除其他外),并且在内部当然是以2为底,因此它比“双精度值可以容纳X个小数位”复杂。
在任何情况下,您都应该能够BigDecimal
对所有计算使用a ,只需使用BigDecimal
而不是内置算术运算符的方法来执行所有数学运算即可。
解决方法
我编写了一个小程序来用Java计算Pi。
我的总结目前正在输入中double
。
我有两个输出,一个是Pi到16个小数位(原始输出)。第二个输出使用NumberFormat
/ 舍入DecimalFormat
到3-5个小数位。
我花了一段时间浏览和浏览Stackoverflow,但是作为一个初学者,我不确定keywords
找到所需的正确方法所需要的任何内容,所以请原谅我。
是否可以计算出超过16个小数位的答案(即Pi)?说32岁?如果是这样,我该如何处理?
我已经看过了BigDecimal
,但是我不认为这是我想要的,因为我看到的所有示例都首先使用大量小数位预先定义了数字,而不是通过计算,但是我可能错了。
我知道double
的是64位类型,因此不会超过16位小数。我也知道使用long
类型会失去精度…
任何建议或指导将不胜感激。
谢谢。
更新资料
不幸的是,使用BigDecimals,我仍然不能获得超过16个小数位……我朝着正确的方向前进吗?
再次更新
我刚刚意识到我认为我的问题出 scale
在我的部门。我将其更改为100,现在我将Pi设置为小数点后100位…我认为该scale
参数允许更高的精度等。它需要该divide(BigDecimal
divisor,int scale,int
roundingMode)
方法。在此处查看Java
Doc >>
利用Madhava–Leibniz系列中的500,000个项,我现在可以使用6个“正确的”有效数字来计算Pi到10,000个小数位。其余的仍在收敛(很显然,需要更多1000项才能更精确地表示Pi)。但是出于我们大多数人需要Pi的目的,这很好。
感谢大家的帮助。