JDK 8 BigInteger精确缩小转换方法

在博客文章“ Java中Long到Int的精确转换 ”中,我讨论了使用Math.toIntExact(Long)来将Long精确地转换为int ,如果无法缩小转换范围,则抛出ArithmeticException 。

该方法是在JDK 8中引入的,后者还向BigInteger类引入了类似的缩小转换方法。 这些BigInteger方法是本文的主题。

BigInteger在JDK 8中添加了四个新的“精确”方法:

  • byteValueExact() –尽可能将BigInteger值准确转换为byte
  • shortValueExact() –如果可能,将BigInteger值转换为short
  • intValueExact() –如果可能,将BigInteger值准确转换为int
  • longValueExact() –尽可能将BigInteger值精确转换为long

如上所述,通过JDK 8添加到BigInteger的这四个“精确”方法中的每一个都可以将BigInteger的值缩小到方法名称中的数据类型(如果可能)。 因为所有这些类型( byteshortintlong )的范围都小于BigInteger ,所以在任何这些情况下, BigDecimal中的值可能都比这四种类型中的任何一种都可以表示的大。 在这种情况下,所有这四个“精确”方法都抛出ArithmeticException而不是悄悄地“将”较大的值“强制”为较小的表示形式(对于大多数情况,这通常是一个无意义的数字)。

可以在GitHub上找到使用这些方法的示例。 执行这些示例时,输出如下所示:

===== Byte =====
125 => 125
126 => 126
127 => 127
128 => java.lang.ArithmeticException: BigInteger out of byte range
129 => java.lang.ArithmeticException: BigInteger out of byte range
===== Short =====
32765 => 32765
32766 => 32766
32767 => 32767
32768 => java.lang.ArithmeticException: BigInteger out of short range
32769 => java.lang.ArithmeticException: BigInteger out of short range
===== Int =====
2147483645 => 2147483645
2147483646 => 2147483646
2147483647 => 2147483647
2147483648 => java.lang.ArithmeticException: BigInteger out of int range
2147483649 => java.lang.ArithmeticException: BigInteger out of int range
===== Long =====
9223372036854775805 => 9223372036854775805
9223372036854775806 => 9223372036854775806
9223372036854775807 => 9223372036854775807
9223372036854775808 => java.lang.ArithmeticException: BigInteger out of long range
9223372036854775809 => java.lang.ArithmeticException: BigInteger out of long range

在带有JDK 8的BigInteger添加这些“精确”方法是一种受欢迎的方法,因为与数字缩小和溢出相关的错误可能很细微。 很高兴有一种简单的方法来获得“精确”的缩小,或者没有能力通过异常使缩小变得明显。

翻译自: https://www.javacodegeeks.com/2018/06/biginteger-exact-narrowing-conversion-methods.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqoop hive导出到mysql_Sqoop hive导出到mysql[转]

通过Sqoop将Hive表数据导入到MySQL通常有两种情况。第一种是将hive上某张表的全部数据导入到mysql对应的表中。第二种是将hive上某张表中的部分数据导入到mysql对应的表中。两种方式的区别在于第二种情况需要指定要导入数据的列名称。两种情况的导入方式分别如下:1.…

c语言大作业_2018 C语言大作业--21_Ekko制作教程

同学们实现的效果:https://www.zhihu.com/video/1066249425780809728以下是开发同学的相关文档:《Ekko》设计报告本组设计并编写的游戏《Ekko》,是一款引用了当下红火的网络游戏《英雄联盟》中的游戏角色Ekko为主角,由本组三名成员…

Nutshell中的Java 8语言功能-第1部分

你好朋友, Java 8发布已经很长时间了,现在越来越多地被使用。 在本文中,我们将讨论以下Java 8主题。 1.功能接口 2,Lambda表达式 3.默认方法 1.功能界面 什么是功能接口? 与一种并且只有一种抽象方法的接口是功能…

mysql怎么查看代码_MySQL中的编码查看与设置(转载)

1.查看数据库编2.查看数据表的编码格式3.创建数据库时指定数据库的字符集mysql>create database character set utf8;4.创建数据表时指定数据表的编码格式create table tb_books (name varchar(45) not null,price double not null,bookCount int not null,author varchar(4…

做ppt用的小插图_如何用PPT做随机抽奖?

每到年底,每个公司都开始筹备年会活动。年会在员工们最期待的就是抽奖环节了。除了用专门的抽奖软件之外,PPT也可以做随机抽奖。今天就来解锁这个动画的做法。1,先设置好图片和文本;2,选中每一张幻灯片,选择…

mysql 隔离级别 快照_MySql的四种事务隔离级别

一、事务的四大特性(ACID)了解事务隔离级别之前不得不了解的事务的四大特性。1、原子性(Atomicity)事务开始后所有操作,要么全部做完,要么全部不做。事务是一个不可分割的整体。事务在执行过程中出错,会回滚到事务开始之前的状态,…

jsp mysql论坛_使用SSM和ajax做一个简易的论坛-01(简介和建表)

三月底刚学完SSM试着做了个简单的论坛,想分享一下,顺便整理一下自己的收获。一、demo介绍一个具有登录、注册功能,发帖、回帖功能的简易论坛。没有后台系统。设计逻辑类似于贴吧,发帖时自动附带一个一楼。二、使用的框架/库前端&a…

elastic 修改map_Amazon Elastic Map Reduce使用Apache Mahout计算建议

elastic 修改mapApache Mahout是一个“可扩展的机器学习库”,其中包括各种单节点和分布式推荐算法的实现。 在上一篇博客文章中, 我描述了如何在单个节点上实现在线推荐系统来处理数据。 如果数据太大而无法放入内存(> 100M首选项数据点&a…

mysql 更新时间加数字_Mysql实战45讲笔记:8、聚合函数count

count(*)的实现方式在不同的MySQL引擎中,count()有不同的实现方式 1. MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count()的时候会直接返回这个数,效率很高; 2. 而InnoDB引擎就麻烦了,它执行count(*)的时候&…

python学生管理系统类图_类图 python

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在研究一个庞大的遗留python类,它有很多方法。 我最终将复杂的方法分解成更小的部分&#x…

简单的测试可以防止最严重的故障

错误处理是软件开发中最困难且被忽略的部分之一,如果系统是分布式的,那么这将变得更加困难。 好的论文写在“ 简单测试可以预防最关键的故障” 主题上。 每个开发人员都应该阅读本文。 我将尝试总结本文的主要内容,但建议阅读该论文以获取有…

sql 两个 in_SQL基础知识——IN运算符

IN的作用IN运算符允许您在WHERE子句中指定多个值。IN运算符是多个OR条件的简写。IN的语法SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...);或者SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT);示例数据库…

pythonlist循环添加元素_python中 for循环之后 添加元素到列表失败?

import re ls list() dc dict() # 介词、连词、人称代词等自己统计 adverb [i, you, he, she, it, in, on, with, by, for, at, about, under, of, to, and, or, therefore, so, of, a] with open("老人与海.txt", moder, encodingutf-8) as f: lryh f.read() # …

开始协议处理句柄_基于smb协议的wmiexec浅析

前言之前研究过Crackmapexec这款工具,对这个工具基于smb协议的wmiexec执行方法产生的流量进行了分析,网上似乎还没有相关的文章,这里旨在抛砖引玉,简单梳理下整个过程,以初学者的视角,探索流量当中存在的奥…

apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

apache camel首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持。我的专长…

mysql max pool_asp.net连接mysql得到错误all pooled connections were in use and max pool size was reach...

asp.net连接mysql数据库时,得到以下错误信息MySql.Data.MySqlClient.MySqlException (080004005): error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled co…

科尔达服务101

我今天想写一篇简短的要点文章。 我真的很好奇我能多快出版此书。 所以走吧 这篇文章是关于Corda Services(使用Corda 3.2版)的。 这些是什么? 作为经常使用Spring的开发人员,我个人会说它们就像Beans。 Spring Beans可以做的还很…

python写入数据到excel_python实现查询的数据写入到excel

#codingutf-8 import sys import xlwt import pymysql as MySQLdb #这里是python3 如果你是python2.x的话,import MySQLdb import datetime host 192.168.10.109 user root pwd port 3306 db com66nao_mi sheet_name report out_path rD:\SQL\aaa.xls print…

1899-11-30 php mysql_PHP学习十一--PHP操作MYSQL数据库

1.PHP访问Mysql数据库的一般步骤连接MySQL服务器选择MySQL数据库请求 执行SQL语句 请求MySQL数据库服务器 关闭结果集 数据资源响应 关闭MySQL服务器 响应(1).连接MySQL服务器。通过…

intent隐式和显式_Neo4j:使隐式关系成为显式和双向关系

intent隐式和显式我最近阅读了Michal Bachman关于 Neo4j中双向关系的文章 ,他建议对于某些关系类型,我们对关系的方向不那么感兴趣,因此可以在查询时忽略它。 他使用以下示例显示Neo Technology和GraphAware之间的合作关系: 两家…