栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

BigDecimal compareTo不能按预期工作

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BigDecimal compareTo不能按预期工作

new BigDecimal(0.7)
没有 代表0.7。

它代表0.69999999999999999999555910790149937383830547332763671875(精确)。

原因是

double
文字
0.7
不完全代表0.7。

如果需要 精确的

BigDecimal
值,则 必须 使用
String
构造函数(实际上, 所有
不使用
double
值的构造函数都可以使用)。

试试吧

new BigDecimal("0.7")

构造函数的JavaDoc

BigDecimal(double)
具有一些相关的注释:

  1. 此构造函数的结果可能有些不可预测。有人可能会假设使用

    new BigDecimal(0.1)
    Java 编写的代码创建的a
    BigDecimal
    等于0.1(非标度值为1,小数位数为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1不能精确地表示为
    double
    (或就此而言,表示为任何有限长度的二进制分数)。因此,尽管出现,但是传递给构造函数的值并不完全等于0.1。

  2. String
    构造,在另一方面,是完全可以预测的:写作
    new BigDecimal("0.1")
    产生了
    BigDecimal

    恰好
    等于0.1,正如人们所期望的那样。因此,通常建议优先使用该
    String
    构造函数。

3.

double
必须将用作的源时
BigDecimal
,请注意,此构造函数提供了精确的转换。与使用方法然后使用构造函数将转换
double
为的结果不同。要获得该结果,请使用方法。
String
Double.toString(double)
BigDecimal(String)
static

valueOf(double)

总结一下:如果要创建一个

BigDecimal
具有固定十进制值的,请使用
String
构造函数。如果您 已经有
一个
double
值,那么
BigDecimal.valueOf(double)
将提供比使用更直观的行为
newBigDecimal(double)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号