技术标签: java 浮点数 精度
import java.math.BigDecimal;
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class Arith {
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
// 这个类不能实例化
private Arith() {
}
/**
* 提供精确的加法运算。
*
* @param v1
* 被加数
* @param v2
* 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
*
* @param v1
* 被减数
* @param v2
* 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
*
* @param v
* 需要四舍五入的数字
* @param scale
* 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED)//使程序最大化.(2) 确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
examples项目启动想知道有哪些错误,通过日志了解代码执行逻辑,但是启动SimpleConsumerDemo了报错如下:log4j.proproties也配置了log4j.proproties配置如下:# Licensed to the Apache Software Foundation (ASF) under one or more# contributor l...
2019独角兽企业重金招聘Python工程师标准>>> ...
LocalDateTime是jdk8时间类API,与Date不同的是,LocalDateTime更为强大可以设置时区Zone和时差ZoneOffset。类似比较如下:Instant类似于DateLocalDateTime 类似于CalendarDateTimeFormatter类似于SimpleDateFormat一、Date与LocalDateTime之间的转换Date <--------> Instant <-------> ZonedDateTime <
第一步:直接在电脑搜索框中,输入“cmd”,以管理员身份运行。第二步:进入JDK安装目录cd C:\Program Files\Java\jdk-13.0.2第三步:执行命令后,再次打开JDK目录就可以看到jre文件备注:必须已管理员身份输入命令才不会报错。...
[JavaScript] 纯文本查看 复制代码#v5=(Conflicted);const-string v4, "testkey"invoke-static {v0, v4}, Landroid/support/v4/a/a;->c(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;#直接把move-result-o...
比较简单,主要用到clone()大同小异的工作周报Sunny软件公司一直使用自行开发的一套OA (Office Automatic,办公自动化)系统进行日常工作办理,但在使用过程中,越来越多的人对工作周报的创建和编写模块产生了抱怨。追其原因,Sunny软件公司的OA管理员发现,由于某些岗位每周工作存在重复性,工作周报内容都大同小异,如图7-1工作周报示意图。这些周报只有一...
1.下载Darknet源码sudo git clone https://github.com/pjreddie/darknet2.编译Darknet源码cd darknetmake3.下载权重文件yolov3.weights,放入到darknet文件夹下下载地址:https://pjreddie.com/media/files/yolov3.weights4.修改cfg文件夹下的yolov3.cfg文件,原文件是训练模式,需要改成测试模式。具体修改方法是,打开Tes
spring-boot-starter 是SpringBoot的核心启动类、支持自动装配、日志和YAML文件格式SpringBoot在编译的时候是用Jdk1.8的版本加载配置文件的命名格式支持3种:1、.yml 2、 .yaml 3、.properties而且注意的是配置文件可以在/src/main/resources下有多层目录结构但是命名必须以application开头的才行,不然就会加载不到报错package org.programb.springboot;import org.s.
js的Array数组对象中有很多有用的方法,js的map函数在某些方面非常的方便强大。map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。let numbers = [1, 5, 10, 15];let roots = numbers.map((x) => {return x * 2;});let roots = numbers.map( x =>...
在IBM DS4000/DS500存储LUN与主机的map时,需要先知道主机的WWN,在LINUX可通过如下方式获得:To get the WWNN (World Wide Node Number) in Linux:mytestsrv1# cat /sys/class/fc_host/host0/node_name0x20000000c9538d83mytestsrv1#...
1.查看系统版本操作命令cat/etc/centos-release显示结果CentOSLinuxrelease7.5.1804(Core)2.准备工作CentOS 7.5版本的镜像包 下载链接:https://www.centos.org/download/USBWriter软件 下载链接:https://sourceforge.net/projects/u...