JAVA(12)数字

Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等
Math 类位于 java.lang 包

静态常量

Math 类中包含 E 和 PI 两个静态常量,其中 E 用于记录 e 的常量,而 PI 用于记录圆周率的值。

System.out.println("E常量的值:"+ Math.E);
System.out.println("PI常量的值:"+ Math.PI);

输出:
E 常量的值:2.718281828459045
PI 常量的值:3.141592653589793

最大值、最小值、绝对值

方法 说明
static int abs(int a) 返回 a 的绝对值
static long abs(long a) 返回 a 的绝对值
static float abs(float a) 返回 a 的绝对值
static double abs(double a) 返回 a 的绝对值
static int max(int x,int y) 返回 x 和 y 中的最大值
static double max(double x,double y) 返回 x 和 y 中的最大值
static long max(long x,long y) 返回 x 和 y 中的最大值
static float max(float x,float y) 返回 x 和 y 中的最大值
static int min(int x,int y) 返回 x 和 y 中的最小值
static long min(long x,long y) 返回 x 和 y 中的最小值
static double min(double x,double y) 返回 x 和 y 中的最小值
static float min(float x,float y) 返回 x 和 y 中的最小值
package com.day01;
public class TelPhone { 
    public static void main(String[] args) {
        System.out.println("10和20的较大值:" + Math.max(10, 20));
        System.out.println("12.5和12的较小值" + Math.min(12, 12.5));
        System.out.println("-10的绝对值" + Math.abs(-10));
    }   
}

输出:
10和20的较大值:20
12.5和12的较小值12.0
-10的绝对值10

求整运算

方法 说明
static double ceil(double a) 返回大于或等于 a 的最小整数
static double floor(double a) 返回小于或等于 a 的最大整数
static double rint(double a) 返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数
static int round(float a) 将参数加上 1/2 后返回与参数最近的整数
static long round(double a) 将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型
import java.util.Scanner;
public class Test03
{
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.outprintln("请输入一个数字:");
        double num=input.nextDouble();
        System.out.println("大于或等于 "+num+" 的最小整数:"+Math.ceil(num));
        System.out.println("小于或等于 "+num+" 的最大整数:"+Math.floor(num));
        System.out.println("将 "+num+" 加上 0.5 之后最接近的整数:"+Math.round(num));
        System.out.println("最接近 "+num+" 的整数:"+Math.rint(num));
    }
}

三角函数运算

方法 说明
static double sin(double a) 返回角的三角正弦值,参数以孤度为单位
static double cos(double a) 返回角的三角余弦值,参数以孤度为单位
static double asin(double a) 返回一个值的反正弦值,参数域在 [-1,1],值域在 [-PI/2,PI/2]
static double acos(double a) 返回一个值的反余弦值,参数域在 [-1,1],值域在 [0.0,PI]
static double tan(double a) 返回角的三角正切值,参数以弧度为单位
static double atan(double a) 返回一个值的反正切值,值域在 [-PI/2,PI/2]
static double toDegrees(double angrad) 将用孤度表示的角转换为近似相等的用角度表示的角
staticdouble toRadians(double angdeg) 将用角度表示的角转换为近似相等的用弧度表示的角
public class Test04
{
    public static void main(String[] args)
    {
        System.out.println{"90 度的正弦值:"+Math.sin(Math.PI/2));
        System.out.println("0 度的余弦值:"+Math.cos(0));
        System.out.println("1 的反正切值:"+Math.atan(l));
        System.out.println("120 度的弧度值:"+Math.toRadians(120.0));
    }
}
指数运算

指数的运算包括求方根、取对数及其求 n 次方的运算。

方法 说明
static double exp(double a) 返回 e 的 a 次幂
static double pow(double a,double b) 返回以 a 为底数,以 b 为指数的幂值
static double sqrt(double a) 返回 a 的平方根
static double cbrt(double a) 返回 a 的立方根
static double log(double a) 返回 a 的自然对数,即 lna 的值
static double log10(double a) 返回以 10 为底 a 的对数
public class Test05
{
    public static void main(String[] args)
    {
        System.out.println("4 的立方值:"+Math.pow(4, 3));
        System.out.println("16 的平方根:"+Math.sqrt(16));
        System.out.println("10 为底 2 的对数:"+Math.log1O(2));
    }
}
生成随机数(random()和random类)
方法 说明
boolean nextBoolean() 生成一个随机的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一个随机的 double 值,数值介于[0,1.0),含 0 而不包含 1.0
int nextlnt() 生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果需要生成指定区间的 int 值,则需要进行一定的数学变换
int nextlnt(int n) 生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成指定区间的 int 值,也需要进行一定的数学变换
void setSeed(long seed) 重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象和相同种子数使用 new 关键字创建出的 Random 对象相同
long nextLong() 返回一个随机长整型数字
boolean nextBoolean() 返回一个随机布尔型值
float nextFloat() 返回一个随机浮点型数字
double nextDouble() 返回一个随机双精度值
格式化数据

DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。DecimalFormat 类包含一个模式和一组符号

符号 说明
0 显示数字,如果位数不够则补 0
# 显示数字,如果位数不够不发生变化
. 小数分隔符
- 减号
, 组分隔符
E 分隔科学记数法中的尾数和小数
% 前缀或后缀,乘以 100 后作为百分比显示
? 乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符
import java.text.DecimalFormat;
import java.util.Scanner;

public class Test {
    public static void main (String[] args) {
        //实例化DecimalFormat类的对象,并指定格式
        DecimalFormat df1 = new DecimalFormat("0.0");
        DecimalFormat df2 = new DecimalFormat("#.#");
        DecimalFormat df3 = new DecimalFormat("000.000");
        DecimalFormat df4 = new DecimalFormat("###.###");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个float类型的数字:");
        float f = scan.nextFloat();
        //对输入的数字应用格式,并输出结果
        System.out.println("0.0格式:"+ df1.format(f));
        System.out.println("#.#格式:"+ df2.format(f));
        System.out.println("000.000格式:"+ df3.format(f));
        System.out.println("###.###格式:"+ df4.format(f));
    }
}

大数字运算(BigInteger类和BigDecimal类)

  • BigInteger 类来处理比 Integer 更大的数字
  • BigInteger 支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值。
  • 要使用 BigInteger 类,首先要创建一个 BigInteger 对象。
  • 最直接的一种是参数以字符串形式代表要处理的数字

语法:

  • BigInteger(String val)
  • BigInteger bi=new BigInteger("5")
  • 这里数字 5 的双引号是必需的,因为 BigInteger 类构造方法要求参数是字符串类型。
方法名称 说明
add(BigInteger val) 做加法运算
subtract(BigInteger val) 做减法运算
multiply(BigInteger val) 做乘法运算
divide(BigInteger val) 做除法运算
remainder(BigInteger val) 做取余数运算
divideAndRemainder(BigInteger val) 做除法运算,返回数组的第一个值为商,第二个值为余数
pow(int exponent) 做参数的 exponent 次方运算
negate() 取相反数
shiftLeft(int n) 将数字左移 n 位,如果 n 为负数,则做右移操作
shiftRight(int n) 将数字右移 n 位,如果 n 为负数,则做左移操作
and(BigInteger val) 做与运算
or(BigInteger val) 做或运算
compareTo(BigInteger val) 做数字的比较运算
equals(Object obj) 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false
min(BigInteger val) 返回较小的数值
max(BigInteger val) 返回较大的数值
package com.day01;

import java.math.BigInteger;
import java.util.Scanner;

public class testDemo {
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("输入一个整型数字:");
        int num = input.nextInt();//保存用户输入的数字
        BigInteger bi = new BigInteger(num+"");//使用输入的数字创建BigInteger对象
        // 计算大数字加上45的结果;
        System.out.println("加法:"+bi.add(new BigInteger("45")));
        // 计算大数字减去20的结果
        System.out.println("减法:"+bi.subtract(new BigInteger("20")));
        // 计算大数字乘以3的结果
        System.out.println("乘法:"+bi.multiply(new BigInteger("3")));
        // 除以2的结果
        System.out.println("除法:"+bi.divide(new BigInteger("2")));

    }
}

输出:
输入一个整型数字:
10
加法:55
减法:-10
乘法:30
除法:5

BigDecimal 类
  • BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。
  • BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。
  • 常用的构造方法如下:
    1、 BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。
    2、 BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。
  • BigDecimal add(BigDecimal augend) //加法
  • BigDecimal subtract(BigDecimal substrhead); //减法操作
  • BigDecimal multiply(BigDecimal multiplieand); //乘法操作
  • BigDecimal divide(BigDecimal divisor, int scale, int roundingMode); //除法操作
  • divide() 方法的 3 个参数分别表示除数、商的小数点后的位数和近似值处理模式。

| roundingMode参数支持的处理模式 |

模式名称 说明
BigDecimal.ROUND_UP 商的最后一位如果大于 0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN 商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING 商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN模式处理
BigDecimal.ROUND_FLOOR 与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理;如果是负数,按照 ROUND_UP 模式处理
BigDecimal.ROUND_HALF_ DOWN 对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后一位进行进位操作
BigDecimal.ROUND_HALF_UP 对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位进行进位操作
BigDecimal.ROUND_HALF_EVEN 如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按照 ROUND_HALF_DOWN 处理
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容