首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果不对double进行操作,我可以在Java中保持精度吗?

如果不对double进行操作,我可以在Java中保持精度吗?
EN

Stack Overflow用户
提问于 2020-05-27 13:11:11
回答 3查看 145关注 0票数 0

我想将值从0.00到10.00以双倍存储。我只需要两位数的精度。如果不对双变量进行操作,我是否可以保证始终得到我存储在变量中的内容?

我查看了这个答案,并测试了以下代码:

代码语言:javascript
运行
复制
    double a = 1.2;
    double b = 1.1;
    System.out.println(a - b);
    System.out.println(a);
    System.out.println(b);

第一个打印输出一个不精确的值,据我理解,解释是机器如何不精确地表示数字。但是,为什么其他两个打印输出精确的值呢?就因为我没做手术?我能假设这一切都是真的吗?

EN

Stack Overflow用户

发布于 2020-05-27 13:35:39

以下是打印双值内容的一些不同尝试:

代码语言:javascript
运行
复制
import java.math.*;

public class FloatShow {

    public static void main(String ... args) {

        System.out.println(1.2);

        System.out.println(new Double(1.2).toString());

        System.out.println(new BigDecimal(1.2).toString());
    }
}

这个打印出来

代码语言:javascript
运行
复制
1.2
1.2
1.1999999999999999555910790149937383830547332763671875

println方法给出了一个双框,并调用了toString,类似地,double使用了toString,它为您做了一些舍入。BigDecimal使用原始值构造一个实例,并在不进行清理的情况下显示它。所以你关于精确性的假设是无效的。

浮点和固定小数是两个不同的概念。这是维基百科中浮点算法的定义。

在计算中,浮点算法(FP)使用实数的公式化表示作为近似,支持范围和精度之间的权衡。因此,浮点计算经常出现在包含非常小和非常大的实数的系统中,这些系统需要快速的处理时间。

但是固定小数(如BigDecimal)是不同的,它存储单个数字。BigDecimal的使用速度较慢,但它并没有像浮点那样进行距离精度的权衡。

浮点对于图形和工程应用是很好的,因为计算是瓶颈,输入不是完全精确的(但在已知的误差范围内),而且可以计算出速度是值得权衡的。对于许多业务应用程序来说,性能差异并不是一个问题,因为其他的东西总是瓶颈,值是确切的,准确性是不可商量的。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62043959

复制
相关文章

相似问题

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