Java中数字的有效位数,和小数点后保留的小数位

2023-05-16

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
/**
 * JAVA中关于数字取几位有效位数,和小数点后保留几位小数的小示例。
 * @author SailingZhao
 *
 */
public class TestBigDecimal {
	
	/**保留几位有效数字
	 * @param oldDouble
	 * @param scale
	 * @return
	 */
	public static double significand(double oldDouble, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException(
					"scale指定的精度为非负值");
		}
		/**
		 * RoundingMode:舍入模式
		 * UP:远离零方向舍入的舍入模式;
		 * DOWN:向零方向舍入的舍入模式;
		 * CEILING: 向正无限大方向舍入的舍入模式;
		 * FLOOR:向负无限大方向舍入的舍入模式;
		 * HALF_DOWN:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入;
		 * HALF_UP:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入;
		 * HALF_EVEN:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入;(在重复进行一系列计算时,此舍入模式可以将累加错误减到最小)
		 * UNNECESSARY:用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
		 */
		RoundingMode rMode =null;
		//rMode=RoundingMode.FLOOR;
		//下面这种情况,其实和FLOOR一样的。
		if(oldDouble>0){
			rMode=RoundingMode.DOWN;
		}else{
			rMode=RoundingMode.UP;
		}
		//此处的scale表示的是,几位有效位数
		BigDecimal b = new BigDecimal(Double.toString(oldDouble),new MathContext(scale,rMode));
		return b.doubleValue();
	}
	/**小数点之后保留几位小数(此处,我们用BigDecimal提供的(除以div)方法实现)
	 * @param oldDouble
	 * @param scale
	 * @return
	 */
	public static double decimal(double oldDouble, int scale) {
		if (scale < 0) {
			throw new IllegalArgumentException(
					"The scale must be a positive integer or zero");
		}
		BigDecimal b = new BigDecimal(Double.toString(oldDouble));
		BigDecimal one = new BigDecimal("1");
		//return b.divide(one, scale, BigDecimal.ROUND_FLOOR).doubleValue();
		if(oldDouble>0){
			//此处的scale表示的是,小数点之后的精度。
			return b.divide(one, scale, BigDecimal.ROUND_DOWN).doubleValue();
		}else{
			return b.divide(one, scale, BigDecimal.ROUND_UP).doubleValue();
		}
	}
	public static void main(String[] args) {
		double d = 1.545;
		int scale = 2;
		double d1 = significand(d,scale);
		double d2 = decimal(d,scale);
		System.out.println(d+"保留"+scale+"位有效数字:"+d1);
		System.out.println(d+"保留小数点之后"+scale+"位小数:"+d2);
		
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中数字的有效位数,和小数点后保留的小数位 的相关文章

  • 一行代码解决macOS下Android Studio提示的“licences have not been accepted”

    打开终端 直接输入 Library Android sdk tools bin sdkmanager licenses 接着一路 y 即可解决问题
  • 最简单的纯css固定table的表头

    页面table通常都需要做表头固定 xff0c 参考了n种实现方式 xff0c 最终还是选择了用纯css来做表头固定 xff0c 只是因为方便 xff0c 易于调试 table tbody display block height 450p
  • kali linux修改更新源及更新

    1 修改sources list源文件 xff1a leafpad etc apt sources list aliyun 阿里云 deb http mirrors aliyun com kali kali rolling main non
  • 手写一个JSON反序列化程序

    上一篇文章 JSON是什么 给大家介绍了JSON的标准规范 xff0c 今天就自己动手写一个JSON的反序列化程序 xff0c 并命名它为 zjson 0 开始之前 本篇文章的目的是学习实践 xff0c 所以我们选择相对简单的Python实
  • mysql 读取指定表的字段类型、名称、注释

    写文档时经常需要整理数据库字段为表格 xff0c 通过下面sql xff0c 可以获取字段的名称 类型 注释等属性 1 简单版 SELECT COLUMN NAME 字段名称 COLUMN COMMENT 字段注释 COLUMN TYPE
  • Jmeter阶梯压力测试_导出测试报告

    阶梯性能测试需要安装jpgc插件 xff0c 所以下文先安装了个插件管理器 xff0c 再安装jpgc插件 xff0c 最后实现阶梯性能测试 1 官网下载Jmeter https jmeter apache org download jme
  • SQL like 多个名称,用正则匹配

    select from category where REGEXP LIKE code 39 0201 0202 39 实现了code字段正则匹配0201 或者 0202
  • 原型、设计、前端 协作工具汇总

    目前主流的 UI 设计软件有 Sketch Photoshop Adobe XD 和 Figma xff0c 并且国内已经有很多优秀软件基于这些设计软件作出了相关协作工具 生成工具 xff0c 大大提高了工作效率 xff0c 在此汇总收集相
  • 单点登录系统对比 - 协议介绍及 cas、keyclock、authz、authing等的对比

    协议 用户中心系统作为服务端 xff0c 肯定是要跟客户端进行对接来授权 amp 获取用户信息的 目前大致流行的有 LDAP CAS OIDC 基于 Oauth2 0 SAML 等 xff0c 此外还有 Kerberos 等不太常见的协议
  • jquery ajax 提交json格式数据

    某些系统后台必须传json数据 xff0c 所以需要使用如下格式设置 ajax url 34 login 34 data JSON stringify 34 username 34 34 zhangsan 34 34 password 34
  • RSA 非对称加密解密,可以javascript和java加解密

    公钥与私钥机制属于非对称加密的范畴 xff0c 非对称是相对于对称加密而言的 xff0c 对称加密用于加密与解密的密钥是同一把 xff0c 而非对称加密则用于加密与解密的密钥不相同 xff0c 一个公开 xff0c 称为公钥 xff1b 一
  • word 通过宏选中所有表格

    1 将下面的脚本复制 2 word 视图 宏 查看宏 输入宏名 xff1a SelectAllTables 点击创建 Alt 43 F11打开VBA代码编辑窗口 xff0c 新增模块 3 将脚本编辑窗口中的默认代码删掉 xff0c 粘贴1步
  • 开源表单收集系统推荐

    1 TDUCK填鸭表单官网 开源表单系统 xff0c 自定义工作流 xff0c 信息收集系统 业务表单自由拖拽实时生成 全新工作流版本 全新移动端UI 表单收款 全新预约组件 投票场景支持 考试场景支持 函数计算支持 目前市面上的表单平台虽
  • .net framework 官方下载地址

    net framework 官方下载地址 https dotnet microsoft com zh cn download dotnet framework
  • QT/C++多线程练习:单生产者多消费者(巨详细版本)

    QT多线程练习 单生产者多消费者 代码思路1 全局变量2 消费者线程3 消费者管理类4 生产者线程5 主线程总结 最近在研究qt的线程的一些知识点 从如何新建线程到以不同的方式去新建线程 xff0c 再到多线程以及多线程同步的几种方式等 看
  • uniapp 设置背景图像

    uniapp设置背景图像方法如下 xff0c 兼容android APP lt view class 61 34 outer 34 style 61 34 background 39 url 39 43 APPSET bgUrl 43 39
  • nginx https 代理 tomcat http,解决访问https还会跳转http问题

    server listen 443 ssl 配置HTTPS的默认访问端口为443 如果未在此处配置HTTPS的默认访问端口 xff0c 可能会造成Nginx无法启动 如果您使用Nginx 1 15 0及以上版本 xff0c 请使用liste
  • jquery pagination分页组件

    pagination 一个jQuery插件 xff0c 提供简单但完全可定制的分页 样式如下 官网 https pagination js org github https github com superRaytin pagination
  • 通过FRP搭建内网穿透,实现域名访问局域网本机

    1我的目标 xff1a 实现通过域名访问局域网tomcat服务 xff0c 域名访问方便本地微信调试 2思路 xff1a xff08 1 xff09 用服务器搭建内网穿透 利用FRP实现穿透 xff0c frp 是一个专注于内网穿透的高性能
  • java 用combiner工具合成图片

    目录 图片合成工具image combinermaven引入项目java代码合成图片 图片合成工具image combiner 官网地址 https gitee com dromara image combiner maven引入项目 lt

随机推荐