首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MathContext.DECIMAL32和MathContext.DECIMAL64,使用哪一种,为什么?

MathContext.DECIMAL32和MathContext.DECIMAL64,使用哪一种,为什么?
EN

Stack Overflow用户
提问于 2016-08-31 09:57:55
回答 1查看 2.1K关注 0票数 1

我应该使用MathContext.DECIMAL32还是MathContext.DECIMAL64?我已经看过文档了,但是我不能真正理解什么时候使用。

我用BigDecimal来表示我想申请多少钱的百分比。就像这样:

代码语言:javascript
复制
...
final MathContext mc = MathContext.DECIMAL32;
BigDecimal amount = getAmount(args);
float percent = getPercent().floatValue();
BigDecimal percentAsBd = new BigDecimal(percent/100.f, mc).setScale(4, RoundingMode.HALF_UP);
BigDecimal threshold = amount.multiply(percentAsBd);
...

我使用oraclejava1.8,ubuntu14.04,英特尔核心i7 (64位)

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 11:44:59

根据您的系统架构,如果您不在x64芯片组,那么任何64位类型操作的指令集将被分割成两个CPU。与您的英特尔核心i7 (x64)有关的任何问题都会被否定。

更新日期:2016年09月1日

根据JVM规范,对任何64位值分配都需要两个32位赋值。

代码语言:javascript
复制
public class IdGenerator {
  private long id;
  public IdGenerator() {
    id = 0;
  }
  public int getNextId() {
    ++value;
  }
}

基于这个假设,上面对getNextId的调用不是原子的。如果在多线程上下文中使用这个类,则结果getNextId()可能不完全准确,例如,这些调用可能产生以下ids :0、1、3、5、6、7、8、10。在x86平台上,您不会得到32位类型的这种行为。

更新5/9/2016

希望下面的链接对我的回答有所帮助

http://preshing.com/20130618/atomic-vs-non-atomic-operations/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39246445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档