当前位置: 首页 > news >正文

网站策划运营方案好用的百度网盘搜索引擎

网站策划运营方案,好用的百度网盘搜索引擎,做企业网站的代码,建设网站一般多钱目录 一、BigDecimal 1、简介 2、构造器描述 3、方法描述 4、使用 一、BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它…

目录

一、BigDecimal

1、简介

2、构造器描述 

3、方法描述 

4、使用


一、BigDecimal

        float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。

为什么要用BigDecimal?

请看下面代码

	public static void main(String[] args) {System.out.println(0.2 + 0.1);System.out.println(0.3 - 0.1);System.out.println(0.2 * 0.1);System.out.println(0.3 / 0.1);}

运行结果:

0.30000000000000004
0.19999999999999998
0.020000000000000004
2.9999999999999996

        你认为你看错了,但结果却是是这样的。问题在哪里呢?原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。

注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值。

        我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。浮点数的值实际上是由一个特定的数学公式计算得到的。

          其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

1、简介

        Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

2、构造器描述 

BigDecimal(int)       创建一个具有参数所指定整数值的对象。 
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。 //不推荐使用
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。 
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。//推荐使用

3、方法描述 

add(BigDecimal)          BigDecimal对象中的值相加,然后返回这个对象。 
subtract(BigDecimal)     BigDecimal对象中的值相减,然后返回这个对象。 
multiply(BigDecimal)     BigDecimal对象中的值相乘,然后返回这个对象。 
divide(BigDecimal)       BigDecimal对象中的值相除,然后返回这个对象。 
toString()               将BigDecimal对象的数值转换成字符串。 
doubleValue()            将BigDecimal对象中的值以双精度数返回。 
floatValue()             将BigDecimal对象中的值以单精度数返回。 
longValue()              将BigDecimal对象中的值以长整数返回。 
intValue()               将BigDecimal对象中的值以整数返回。

为什么BigDecimal(double)  不推荐使用?

	public static void main(String[] args) {BigDecimal intStr = new BigDecimal("22");BigDecimal doubleStr = new BigDecimal(1.111111111);System.out.println(intStr);System.out.println(doubleStr);}

运行结果:

22
1.111111111000000040149870983441360294818878173828125

看上面代码运行结果,你就应该知道为什么不推荐使用了,因为用这种方式也会导致计算有问题,

为什么会出现这种情况呢?

 JDK的描述:

        1、参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入new BigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。

        2、另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好等于预期的 0.1。因此,比较而言,通常建议优先使用String构造方法

        当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,如下

	public static void main(String[] args) {BigDecimal intStr = BigDecimal.valueOf(3.66666);BigDecimal doubleStr = new BigDecimal(Double.toString(3.666666));System.out.println(intStr);System.out.println(doubleStr);}

运行结果:

3.66666
3.666666

4、使用

基本的加减乘除

	public static void main(String[] args) {BigDecimal a = new BigDecimal(36);BigDecimal b = new BigDecimal("12");System.out.println("a + b =" + a.add(b));System.out.println("a - b =" + a.subtract(b));System.out.println("a * b =" + a.multiply(b));System.out.println("a / b =" + a.divide(b));}

注意:

如果进行除法运算的时候,结果不能整除,有余数,这个时候会报java.lang.ArithmeticException,这边我们要避免这个错误产生,在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参数

divide(BigDecimal,保留小数点后几位小数,舍入模式)

舍入模式

ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN    //向零方向舍入
ROUND_FLOOR   //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP   //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY  //计算结果是精确的,不需要舍入模式
ROUND_UP    //向远离0的方向舍入

java.math.RoundingMode中例子放到html中

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<table border><caption><b>Summary of Rounding Operations Under Different Rounding Modes</b></caption><tr><th></th><th colspan=8>Result of rounding input to one digit with the givenrounding mode</th><tr valign=top><th>Input Number</th><th>{@code UP}</th><th>{@code DOWN}</th><th>{@code CEILING}</th><th>{@code FLOOR}</th><th>{@code HALF_UP}</th><th>{@code HALF_DOWN}</th><th>{@code HALF_EVEN}</th><th>{@code UNNECESSARY}</th><tr align=right><td>5.5</td>  <td>6</td>  <td>5</td>    <td>6</td>    <td>5</td>  <td>6</td>      <td>5</td>       <td>6</td>       <td>throw {@code ArithmeticException}</td><tr align=right><td>2.5</td>  <td>3</td>  <td>2</td>    <td>3</td>    <td>2</td>  <td>3</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td><tr align=right><td>1.6</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>2</td>      <td>2</td>       <td>2</td>       <td>throw {@code ArithmeticException}</td><tr align=right><td>1.1</td>  <td>2</td>  <td>1</td>    <td>2</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>throw {@code ArithmeticException}</td><tr align=right><td>1.0</td>  <td>1</td>  <td>1</td>    <td>1</td>    <td>1</td>  <td>1</td>      <td>1</td>       <td>1</td>       <td>1</td><tr align=right><td>-1.0</td> <td>-1</td> <td>-1</td>   <td>-1</td>   <td>-1</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>-1</td><tr align=right><td>-1.1</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-1</td>     <td>-1</td>      <td>-1</td>      <td>throw {@code ArithmeticException}</td><tr align=right><td>-1.6</td> <td>-2</td> <td>-1</td>   <td>-1</td>   <td>-2</td> <td>-2</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td><tr align=right><td>-2.5</td> <td>-3</td> <td>-2</td>   <td>-2</td>   <td>-3</td> <td>-3</td>     <td>-2</td>      <td>-2</td>      <td>throw {@code ArithmeticException}</td><tr align=right><td>-5.5</td> <td>-6</td> <td>-5</td>   <td>-5</td>   <td>-6</td> <td>-6</td>     <td>-5</td>      <td>-6</td>      <td>throw {@code ArithmeticException}</td>
</table>
</body>
</html>

需要对BigDecimal进行截断和四舍五入可用setScale方法,例:

	public static void main(String[] args) {BigDecimal a = new BigDecimal("2.3366");a = a.setScale(2, RoundingMode.HALF_UP);System.out.println(a);}

运行结果:2.34



原文链接:https://blog.csdn.net/qq_35868412/article/details/89029288

无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

http://www.khdw.cn/news/43765.html

相关文章:

  • 做家具的网站做网站哪个平台好
  • 英山县城乡建设规划局网站六年级下册数学优化设计答案
  • 东营做网站排名外贸网站免费建站
  • 南宁 建网站 公司深圳市龙华区
  • 网站怎么做双语种ai智能搜索引擎
  • 合肥建设网站查询写软文赚钱的平台都有哪些
  • 武汉市网站开发公司安卓系统优化app
  • 临沧市网站建设线上宣传有哪些好的方式方法
  • 安阳做网站公司百度推广客户端app下载
  • wordpress 提示插件深圳seo优化服务
  • 网页具有动画网站建设技术百度手机助手下载免费安装
  • 找网上公司做网站360网址导航
  • 学做婴儿衣服网站好获客引流100种方法
  • 个人网站 可以做论坛吗查询域名网站
  • 衡水专业做网站软件定制开发公司
  • 没有服务器 怎么做网站晨阳seo服务
  • 如何做色流量网站网络营销具有什么特点
  • 毕设用别人网站做原型成都门户网站建设
  • 同ip怎么做不同的网站现在广告行业好做吗
  • 百度网站建设微信封面广州新闻热点事件
  • 北京建网站的营销培训班
  • 新密做网站公司品牌软文范文
  • 安的网络网站建设网络营销的策略包括
  • 怎么建设推广网站腾讯网qq网站
  • 怎么做卡盟网站免费免费进入b站2022年更新
  • 黄山网站开发公众号运营收费价格表
  • 棋牌游戏网站怎么做百度优化点击软件
  • 网站对固定ip转向怎么做2022年今天新闻联播
  • 如何做相亲网站怎么做私人网站
  • 网页设计跟做网站一样吗关键词优化的五个步骤