【问题标题】:convert double values in decimal (fraction) values java将双精度值转换为十进制(分数)值java
【发布时间】:2014-06-11 09:35:47
【问题描述】:

我有以下代码:

Double a = new Double((123456798/1000000)); //123456798 this value comes from client side as a `int`
DecimalFormat df = new DecimalFormat("###.###");            
log.info("a :"+a+" df "+df.format(a.doubleValue()));

输出:

a :123.0 df 123
//i want output like this, a :123.xxx fd 123.xxx

请帮忙

更新:

123456798 这个值来自客户端作为 int 所以我不能把它作为 123456798.0(或其他东西)

【问题讨论】:

  • 仅仅因为您收到int 的值并不意味着您不能将其分配给double 变量...(您为什么要创建Double?我认为这里不需要使用包装器类型...)
  • 我有卢比货币的价值(123456798),所以我把它当作int,我把卢比换成了百万,所以我把它分成了1000000
  • @JonSkeet 请看上面的评论。
  • 所以(123456798*1.0)/1000000分派给你答案。
  • @mohsinazeem:我没有建议,是吗?我建议采用您提供的int 值,并将那个 存储在double 变量中:double x = valueReceivedFromElsewhere; double y = x / 1000000;。当然,这实际上与铸造相同。

标签: java double decimalformat


【解决方案1】:

1234567981000000int 文字,因此将它们除将使用整数运算,并产生 123。 相反,您可以使用浮点文字来使用浮点运算:

Double a = new Double((123456798.0/1000000.0));
DecimalFormat df = new DecimalFormat("###.###");            
log.info("a :"+a+" df "+df.format(a.doubleValue()));

【讨论】:

  • double a = 123456798.0/1000000.0; 会更简单。
【解决方案2】:

除法中的任何一个值都应该是浮点数或双精度数。

Double a = new Double((123456798.0/1000000));

Double a = new Double((123456798/1000000.0));

如果您在变量中获取这些值,那么multiply it with 1.0

喜欢

Double a = new Double((variable*1.0/1000000));

【讨论】:

  • 为什么要乘以 1.0 而不是只转换为 double?为什么继续 OP 对Double 的毫无意义的使用?为什么是双括号?基本上这会更好:double a = variable / 1000000.0; 或者如果你真的想要,double a = ((double) variable) / 1000000;
  • @JonSkeet 你回复晚了这就是我投这个答案的原因,我使用了1.0,但现在我正在使用你的建议!再次感谢!
【解决方案3】:

这样说

Double a = new Double((123456798.0/1000000.0)); // <- note ".0"

错误行为的原因是整数除法

  123456798/1000000 

整数值,而

  123456798.0/1000000.0

浮点数一(双)

【讨论】:

    【解决方案4】:
    Double a = new Double((123456798/1000000));
    

    你在这里做整数除法。将其中一个常量设为double,以便完成浮点除法。另外,你为什么使用Double?最好使用原始类型double

    double a = 123456798.0 / 1000000;
    

    或者简单地说,因为它们是常量:

    double a = 123.456789;
    

    【讨论】:

      【解决方案5】:

      您执行整数除法,这就是a 不正确的原因:

      Double a = new Double(123456798.0/1000000);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多