在Java中使用现金

在Java中使用现金,java,android,bigdecimal,Java,Android,Bigdecimal,EDIT2:我是个白痴>我见过的处理货币值的最好方法是在内部将它们作为非十进制类型处理,并且只在需要时对输出和输入执行转换 例如:$10.34可以/应该存储为整数或长1034,然后根据需要显示为整数1034/100、1034 mod 100注意:我的java模数运算符可能/可能已禁用-不要经常使用它 任何时候处理浮点数都有丢失精度的风险。因为货币被定义为有一个固定的浮点数和一个固定的小数位数,所以将所有值按100的比例缩放就消除了这个问题。这确实减少了可以表示的最大货币量,但一般来说,这与其说是

EDIT2:我是个白痴>我见过的处理货币值的最好方法是在内部将它们作为非十进制类型处理,并且只在需要时对输出和输入执行转换

例如:$10.34可以/应该存储为整数或长1034,然后根据需要显示为整数1034/100、1034 mod 100注意:我的java模数运算符可能/可能已禁用-不要经常使用它


任何时候处理浮点数都有丢失精度的风险。因为货币被定义为有一个固定的浮点数和一个固定的小数位数,所以将所有值按100的比例缩放就消除了这个问题。这确实减少了可以表示的最大货币量,但一般来说,这与其说是一个问题,不如说是一个准确性问题

我建议把这些问题分解成单独的、简短的、简明的问题,因为事实上,很难提供帮助。关于使用BigDecimal的问题,或者具体是您有什么问题,还不清楚;您最好展示一小段代码来演示确切的问题。那么,关于布局的问题应该在一个单独的问题中。另外,我碰巧注意到bdMilageRate=new BigDecimal0.90d,这可能是一个打字错误。@Trevor:我想你可以用小数来做这件事——在双打末尾加上d。。。。f到浮动的末尾。。。也许这没关系?不过,谢谢你的建设性批评。我将开发一个更小的应用程序来发现问题——如果需要的话,我会回到StackOverflow。啊——我想知道的是0.90。我想知道你是否打算用0.00初始化它。我还没有检查过代码中的很多其他内容;这引起了我的注意。是的,bdMilageRate指的是这家商店为司机每次送货支付的金额。每批货的运费是0.90英镑。啊——刚刚实现。好吧,我不得不踢自己。当然这是基础数学><我要把这归咎于没有练习:P谢谢你的帮助!我现在没事了XD