java的数学类使用

目录

一、Math类 

二、BigDecimal

三、BigInteger

四、DecimalFormat数字格式化


一、Math类 

// 自然指数
System.out.println(Math.E); // 2.718281828459045
// 圆周率
System.out.println(Math.PI); // 3.141592653589793// 求绝对值
System.out.println(Math.abs(-3)); // 3
// 求立方根
System.out.println(Math.cbrt(27)); // 3.0
// 向上取整
System.out.println(Math.ceil(-3.4));  // -3.0
// 向下取整
System.out.println(Math.floor(-3.7)); // -4.0
// 四舍五入
System.out.println(Math.round(3.57)); // 4// 最大值
System.out.println(Math.max(10,20)); // 20
// 最小值
System.out.println(Math.min(10,20)); // 10
// 加权函数  a的b次方
System.out.println(Math.pow(2,10)); // 1024.0
// 随机数  [0,1)
System.out.println(Math.random()); // 0.5776188237170176
// 平方根
System.out.println(Math.sqrt(16)); // 4.0

二、BigDecimal

需要精确计算时(财务、金融),要求参数以字符串形式传递,底层使用按位运算。

double b = 3.14;
double b1 = 5.0;
// 无限循环小数和无限不循环小数无法存储,没办法精确表示小数 (10/3.0)
// 默认java中无法精确计算
System.out.println(b1 - b); // 1.8599999999999999
System.out.println(String.format("%.2f", b1 - b)); // 1.86

NaN:判断是否是非数字

double b = 3.14;
System.out.println(Double.isNaN(d1));

        BigDecimal用于计算精确的类,传入的值应当是字符串,如果使用数字(如 double、float、long)来创建BigDecimal实例时,这些数字首先会按照它们各自的数据类型进行处理,然后转换为 BigDecimal。

        但是,由于double和float是基于IEEE 754标准的浮点数表示,它们不能精确表示所有的小数,尤其是那些无限循环或非常长的小数。因此,使用double或float构造BigDecimal时,可能会遇到精度丢失的问题。

BigDecimal bigDecimal = new BigDecimal(2.0);
BigDecimal bigDecimal2 = new BigDecimal(1.99);
System.out.println(bigDecimal.subtract(bigDecimal2));// 0.0100000000000000088817841970012523233890533447265625

        使用字符串(String)来构造BigDecimal实例时,可以避免由于浮点数表示不准确而带来的精度问题。字符串表示的小数在转换为BigDecimal时,会按照字符串中的精确值来构造,不会有任何精度的丢失。

BigDecimal bigDecimal3 = new BigDecimal("3.0");
BigDecimal bigDecimal4 = new BigDecimal("1.5");// 差法
System.out.println("差:" + bigDecimal3.subtract(bigDecimal4));
// 加法
System.out.println("加:" + bigDecimal3.add(bigDecimal4));
// 乘法
System.out.println("乘:" + bigDecimal3.multiply(bigDecimal4));
// 除法
System.out.println("除:" + bigDecimal3.divide(bigDecimal4));
// 如果除不尽会报错:
Exception in thread "main" java.lang.ArithmeticException: 
Non-terminating decimal expansion; no exact representable decimal result.at java.base/java.math.BigDecimal.divide(BigDecimal.java:1736)

三、BigInteger

BigInteger 用于存储和计算非常大的整数。

// 大十进制  大量数字的存储和计算
BigInteger bigInteger1 = new BigInteger("149257915");
BigInteger bigInteger2 = new BigInteger("4179127477");
System.out.println(bigInteger1.multiply(bigInteger2));

四、DecimalFormat数字格式化

double d = 73.98 * 0.85;
System.out.println(d); // 62.883

使用DecimalFormat可以指定数据的显示格式,DecimalFormat.format()方法可以进行四舍五入,用0代表占位,表示一位数字。如果没有数字,用0代替。

// 四舍五入
DecimalFormat decimalFormat = new DecimalFormat("0.00");
System.out.println(decimalFormat.format(d));  // 62.88DecimalFormat decimalFormat1 = new DecimalFormat("0.0");
System.out.println(decimalFormat1.format(d)); // 62.9// 用0补位
DecimalFormat decimalFormat2 = new DecimalFormat("0.00000");
System.out.println(decimalFormat2.format(d)); // 62.88300DecimalFormat decimalFormat3 = new DecimalFormat("000.00000");
System.out.println(decimalFormat3.format(d)); // 062.88300// # 代表占位,表示一位数字。如果这一位没有数字,那么就不填充
// 0.#0 明显不符合常识,不能使用
double d1 = 10.09 * 0.85;
DecimalFormat decimalFormat4 = new DecimalFormat("#0.00");
System.out.println(decimalFormat4.format(d1)); // 8.58// 科学计数法
DecimalFormat decimalFormat5 = new DecimalFormat("0.00E0");
System.out.println(decimalFormat5.format(d1)); // 8.58E0  表示8.58乘以10的1次方DecimalFormat decimalFormat6 = new DecimalFormat("0.000E0");
System.out.println(decimalFormat6.format(d1)); // 8.508E0  表示8.508乘以10的1次方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148340.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

comp 9517 Computer Vision week1

本篇博文为课堂笔记,因为英语不好现在不得不课下看录像复习一遍 颜色模型 RGBHSVYCbCrL\*a\*b RGB 有红、绿、蓝三通道 problem:不同通道之间高度相关,包含同种信息 如果想要紧凑的(as compactly as possible)存储图像RGB不合适,…

[DRAM Test]内存测试维修工具大全

目录 1、《HCI MemTest, RunMemtestPro》 2、《MEMTEST64》 3、AIDA64稳定性测试 4、《MEMTEST86》与《MEMTEST86》 5、Windows Memory Diagnostic Tool(微软内存诊断工具) 6、《RAM STRESS TEST》 7、《AMT64和AMT128》 8、《DocMemory》 9、《RAMFIX V110516B》 10…

word如何快速打开文档中的网址超链接?

1、鼠标放在文档中超链接上: 2、然后左手按住【CTRL】键,之后鼠标光标会变成一个手形, 然后右手,点击鼠标左键,即可快速使用电脑当前设置的默认浏览器打开并跳转到网址:

力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!

力扣《反转链表》系列文章目录 刷题次序,由易到难,一次刷通!!! 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

回溯算法(递归+回退)——1基础理论

文章目录 一、概念二、算法原理三、代码模板四、例题实现1、参数确定2、确定终止条件3、for循环的构建4、AC代码JavaC 5、剪枝优化理论:代码编写方式:JavaC 一、概念 回溯算法(BackTracking)一种通过递归,实现暴力枚举…

Python | Leetcode Python题解之第429题N叉树的层序遍历

题目: 题解: class Solution:def levelOrder(self, root: Node) -> List[List[int]]:if not root:return []ans list()q deque([root])while q:cnt len(q)level list()for _ in range(cnt):cur q.popleft()level.append(cur.val)for child in c…

【数据结构与算法】LeetCode:二分查找

文章目录 二分查找二分查找搜索插入位置 (Hot 100)x 的平方根搜索二维矩阵(Hot 100)在排序数组中查找元素的第一个和最后一个位置 (Hot 100)搜索旋转排序数组 (Hot 100)寻找旋转排序…

postman工具

postman是什么接口工具。接口是什么api(俗称应用编程接口,简称接口);也就是程序(服务端程序)与程序(客户端程序)之间的通信方式。例如模仿服务端发送请求到客户端例如模仿客户端发送…

情指行一体化平台建设方案和必要性-———未来之窗行业应用跨平台架构

一、平台建设必要性 以下是情指行一体化平台搭建的一些必要性: 1. 提高响应速度 - 实现情报、指挥和行动的快速协同,大大缩短从信息获取到决策执行的时间,提高对紧急情况和突发事件的响应效率。 2. 优化资源配置 - 整合各类资源信…

没有 Microsoft Wi-Fi Direct Virtual Adapter #2 导致无法打开热点

我的环境 电脑打不开热点 系统 win11 64位 品牌 hp 笔记本电脑 解决方法: https://answers.microsoft.com/zh-hans/windows/forum/all/%E7%A7%BB%E5%8A%A8%E7%83%AD%E7%82%B9%E6%97%A0/9285620a-71d9-4671-b125-4cd607b6371a 解决 😓 扫描一下设…

Codeforces Round 969 (Div. 1) C. Eri and Expanded Sets(线段树维护差分数组gcd+双指针+尺取)

题目 转化一下题意就是&#xff0c; 给定一个n(n<4e5)&#xff0c;代表数组a的长度&#xff0c; 求有多少区间&#xff0c;满足区间内两两差分后得到的新数组的gcd∈{0,1} 实际t(t<1e4)组样例&#xff0c;保证sumn不超过4e5 思路来源 乱搞acjiangly代码 题解 一个…

摆脱困境并在 Android 手机上取回删除照片的所有解决方案

没有什么比不小心从 Android 智能手机中删除所有照片更糟糕的了。这样&#xff0c;除非您在重置之前已经备份了数据&#xff0c;否则您的所有照片都会消失。如果您忘记备份照片&#xff0c;您仍然可以按照一些简单的技术在 Android 设备上恢复已删除的照片。 您的 Android 智能…

【漏洞复现】用友 NC-Cloud queryStaffByName Sql注入漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

VMware安装ubuntu24.04桌面版

一、安装推荐要求 双核2 GHz处理器或更高 4 GB系统内存 25 GB磁盘存储空间 可访问的互联网 光驱或USB安装介质 二、下载桌面系统 下载地址&#xff08;使用手机转存再下载是对作者的最大支持&#xff09;&#xff1a;夸克网盘分享 (quark.cn) 已安装的纯净版ubuntu虚拟…

招联金融2025秋招--大量招后台、算法

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策划 产品运营…

Day05 日期类OJ题目

计算日期到天数转换_牛客题霸_牛客网根据输入的日期&#xff0c;计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶&#xff1a;时。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726974727572 根据输入的日期&#xff0c;计算是这一年的第几…

Golang | Leetcode Golang题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; func levelOrder(root *Node) (ans [][]int) {if root nil {return}q : []*Node{root}for q ! nil {level : []int{}tmp : qq nilfor _, node : range tmp {level append(level, node.Val)q append(q, node.Children...)}ans append(a…

HTML和CSS做一个无脚本的手风琴页面(保姆级)

一、前言 使用HTML和CSS做一个无脚本的手风琴页面。让知识以自己喜欢的方式进入脑子&#xff0c;适用于很多场景&#xff0c;比如以下&#xff1a; 【注&#xff1a;图片源自百度】 二、HTML框架 使用外部样式表&#xff0c;将CSS文件用link标签引入 整体框架如下图&#x…

20240923 每日AI必读资讯

GPT-4o能玩《黑神话》&#xff01;精英怪胜率超人类&#xff0c;无强化学习纯大模型方案 - 阿里巴巴的研究人员们提出了一个新型VARP&#xff08;视觉动作角色扮演&#xff09;智能体框架。 - 能直接将游戏截图作为输入&#xff0c;通过视觉语言模型推理&#xff0c;最终生成…

WebGL颜色与纹理

WEBGL中的着色器变量包括以下种类&#xff1a; 属性变量&#xff08;Attribute Variables&#xff09;&#xff1a;这些变量用于接收从应用程序中传递的顶点数据&#xff0c;比如顶点位置和颜色&#xff0c;是只读的不可修改。统一变量&#xff08;Uniform Variables&#xff…