chuizhi5858 2017-07-10 07:57 采纳率: 0%
浏览 2477

在实例化Decimal对象中为什么要把double转化为string

比如这两句,如果不用toString的话,输出就会出现后面有很多位小数的情况,请问是为什么呢

 BigDecimal big1=new BigDecimal(Double.toString(value1));
BigDecimal big2=new BigDecimal(Double.toString(value2));
  • 写回答

1条回答 默认 最新

  • sinat_38913556 2017-07-10 08:16
    关注

    一:有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),
    但是它实际上等于 0.1000000000000000055511151231257827021181583404541015625。
    这是因为 0.1 无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。
    这样,传入 到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。

    二:另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个 BigDecimal,
    它正好 等于预期的 0.1。因此,比较而言,通常建议优先使用 String 构造方法。

    三:使用public static BigDecimal valueOf(double val)
    使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。

    这通常是将 double(或 float)转化为 BigDecimal 的首选方法,
    因为返回的值等于从构造 BigDecimal(使用 Double.toString(double) 得到的结果)得到的值。

    参考:
    http://blog.csdn.net/xiaoyufu007/article/details/6654010

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?