我知道BigDecimal是用于在Java中表示货币价值的推荐最佳实践.你用什么?您是否更喜欢使用更好的库?
在Java应用程序中使用money数据类型的最佳实践是什么?钱应该是双变量?四舍五入,货币等等.这是特殊的图书馆吗?那么在大多数流行的数据库中ORM和SQL呢?据我所知,并非所有SQL引擎都是Money数据类型.在那种情况下NUMERIC(15,2),DECIMAL(15,2)应该使用REAL数据类型?
我注意到这个构造函数有很大的痛苦(即使在Stack Overflow上也是如此).人们使用它,即使文档明确指出:
这个构造函数的结果可能有点不可预测 http://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double)
可能不推荐使用的现有规范:我们建议弃用BigDecimal(double)构造函数,该构造函数目前提供的结果与Double.toString()方法不同.
尽管如此,构造函数还没有被弃用.
我很想听到有关这方面的任何看法.
我想要得到几个数字的加权平均值.基本上我有:
Price - 134.42
Quantity - 15236545
Run Code Online (Sandbox Code Playgroud)
可以有少至一个或两个或多达五十或六十对价格和数量.我需要弄清楚价格的加权平均值.基本上,加权平均值应该给对象提供非常小的权重
Price - 100000000.00
Quantity - 3
Run Code Online (Sandbox Code Playgroud)
以及更多对上面的那对.
我现在的公式是:
((price)(quantity) + (price)(quantity) + ...)/totalQuantity
Run Code Online (Sandbox Code Playgroud)
到目前为止,我做到了这一点:
double optimalPrice = 0;
int totalQuantity = 0;
double rolling = 0;
System.out.println(rolling);
Iterator it = orders.entrySet().iterator();
while(it.hasNext()) {
System.out.println("inside");
Map.Entry order = (Map.Entry)it.next();
double price = (Double)order.getKey();
int quantity = (Integer)order.getValue();
System.out.println(price + " " + quantity);
rolling += price * quantity;
totalQuantity += quantity;
System.out.println(rolling);
}
System.out.println(rolling);
return rolling/totalQuantity;
Run Code Online (Sandbox Code Playgroud)
问题是我很快就将"滚动"变量最大化了.
我怎样才能真正得到加权平均值?
在Java中,我需要在0和之间随机生成一个数字0.06.
我在这里看到另一个问题,下面的代码可以解决这个问题:
Random generator = new Random();
double number = generator.nextDouble() * .06;
Run Code Online (Sandbox Code Playgroud)
然而,这样做给了我很长的数字,0.007044013589130205而且0.03656588431980957,我认为这不是我的导师所期待的.
反正有没有生成0到0.06之间只有两位或三位小数的随机数?
我应该如何命名我的班级,以CAD /美元的价格存储成本/价格/金额作为单独long的美元和美分?我有"PriceInDollars",但我不是那么喜欢,而且我总是忘记它.有任何想法吗?
编辑:显然我应该使用BigDecimal,而不是重新发明轮子.我想我会用它.尽管如此,我确实学到了很多东西.
请在这里查看我的其他问题!
我正在使用MongoDB在Lift中开发一个电子商务网站
我需要存储一些产品价格数据
我的问题是:
如果我想存储数据类型BigDecimal,我应该在MongoDB中使用什么字段类型
在mapper中是一个类型为:MappedDecimal的字段,但是
在net.liftweb.mongodb.record.field中没有等价物
我如何存储这些信息?
谢谢大家的关注和帮助