我编写了一个小程序来用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的目的,这很好。
感谢大家的帮助。
首先,双精度型的宽度与其可容纳的小数位数没有直接关系。双精度值是一个尾数和一个指数(除其他外),并且在内部当然是以2为底,因此它比“双精度值可以容纳X个小数位”复杂。
在任何情况下,您都应该能够BigDecimal
对所有计算使用a ,只需使用BigDecimal
而不是内置算术运算符的方法来执行所有数学运算即可。
下面是一个程序,它应该计算小数点后的双倍值中的位数。在输入一些双值时,程序倾向于开始一个无限循环(可能是由于浮点不精确)。我不想使用任何包装器方法(包括String类)。有人可能为某些输入的无休止循环提供解释并提供解决方案吗?
问题内容: 我正在使用下面的代码来获取我在两个分解位置创建的方法的答案。但是,当我这样做并顺从时,我得到一个错误,提示期望标识符。2错误出现,一个指向2,另一个指向之前。我怎么了 问题答案: 您所显示的内容是正确的,假设行不是全部在一起(语句必须在任何类的外部)。因此,例如,这是有效的: …但是问题中显示的那几行不是。 如果不是那样,您说过错误似乎集中在上。有时,当我们在SO上看到类似这样的问题时
将双精度数字相乘,从输出中取小数点后两位 expectedRenewalAmount的输出是,那么我们如何用两个十进制数格式化上述输出 预期:
我正在尝试在旁边使用值方法。 不幸的是,编译器说不兼容的类型。 如果我将s更改为s,它仍然不喜欢它。
我对编程很陌生,在大学里我们学习了不同类型的数字(整数、短数、浮数、双数)。Float和double是浮点数。通常,它们由一个符号+/-、一个尾数和一个指数组成。每个部分占用一定数量的比特。一个浮动最多可以显示小数点后7位,最多可以双倍显示16位。其公式是: 23·log10(2)=23·(log(2)/log(10))≈23·0.3≈7(浮点数小数点后) 52·0.3≈16(双人小数点后) 我知
我正在尝试编写一个Python 2.5.4代码来编写一个函数,该函数以浮点数x作为输入,并返回x中小数点后的位数。 这是我的代码: while循环中的print语句仅用于调试目的。 现在,当我运行这段代码时,我得到以下输出。 1 10 1.4159 1 2 100 14.159 14 3 1000 141.59 141 4 10000 1415.9 1415 5 100000 14159.0 14