我正在接收一个账户的股票价格和持有股份的数量的平面文件。一个文件包含价格和股票到小数点6位。另一个文件包含小数点后12位的价格和股票。
系统需要持久化,并在以后显示这些值(最好是在平面文件中接收到的小数位数)。价格和股票将需要用于计算业绩(根据价格变化)和持有百分比(根据股票)。性能和持有百分比只需显示到小数点后两位。
在这里双倍满足我的需求还是BigDecimal更合适?
发布于 2016-07-29 05:39:10
没有double不能满足您的需要。
如果不是因为需要计算,String将最好地满足您的需要。
这就剩下BigDecimal了。它的计算速度比double慢,但它将忠实地计算每一个基数10位数。
double的问题在于它的显示方式近似于它存储的内容。我们在基数10中显示double,但将其存储在基2中。当它只表示连续值(如温度)的测量值时,这是很好的。使用它来表示像货币这样的离散基数10小数点值,并邀请罗恩·利文斯顿和理查德·普赖尔偷取你的半便士。
double似乎也应该是离散的。毕竟,它也存储在1和0中。在现实中是这样。但是基数2离散和基数10离散并不总是匹配,因为我可以用两个尺子显示,不同的划分油墨。如果BigDecimal表示顶级标尺,double表示底层标尺,那么尺子的每一个值都可以在我们的计算机中完美地表示出来。然而,你不能总是完美地从一个转换到另一个。

两者在1英寸处匹配。它们在1/2英寸处匹配。他们不匹配在1/10英寸。要达到1/10,你必须除以5。double只知道如何除以2。
更糟糕的是,double将试图接近1/10。甚至可以把显示器转到看上去像.1的地方。但是因为它并不是真的在里面,所以它的数量只是在等待你的计算的混乱。
试图double你的钱是麻烦。
https://softwareengineering.stackexchange.com/questions/326037
复制相似问题