JAVA

BigDecimal的运算——加减乘除

BigDecimal num1 = new BigDecimal("0.005");

如果传值而不是传字符串会丢失精度
加法 函数
减法函数
乘法函数
除法函数
绝对值函数

BigInteger的运算

package ustc.lichunchun.bigdataapi;

import java.math.BigInteger;

public class BigIntegerDemo1 {

    public static void main(String[] args) {
        BigInteger bi1 = new BigInteger("123456789") ;    // 声明BigInteger对象
        BigInteger bi2 = new BigInteger("987654321") ;    // 声明BigInteger对象
        System.out.println("加法操作:" + bi2.add(bi1)) ;    // 加法操作
        System.out.println("减法操作:" + bi2.subtract(bi1)) ;    // 减法操作
        System.out.println("乘法操作:" + bi2.multiply(bi1)) ;    // 乘法操作
        System.out.println("除法操作:" + bi2.divide(bi1)) ;    // 除法操作
        System.out.println("最大数:" + bi2.max(bi1)) ;     // 求出最大数
        System.out.println("最小数:" + bi2.min(bi1)) ;     // 求出最小数
        BigInteger result[] = bi2.divideAndRemainder(bi1) ;    // 求出余数的除法操作
        System.out.println("商是:" + result[0] + 
            ";余数是:" + result[1]) ;
    }
}

注意:

System.out.println()中的数字默认是double类型的,double类型小数计算不精准。
使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错:其他大佬博客

输入

import java.util.*;
import java.math.*;

public class Main {
    public static void main(String[] args) {
        //创建Scanner对象,接受从控制台输入
        Scanner cin=new Scanner(System.in);
        //接受String类型
        String a,b;
        //输出结果
        while (cin.hasNext()) {
            a = cin.next();
            b = cin.next();
            BigDecimal a1=new BigDecimal(a);
            BigDecimal a2=new BigDecimal(b);
            System.out.println(a1.add(a2));
            System.out.println(a1.multiply(a2));
        } 
        cin.close();
    }

}

输入

循环输入

Scanner cin=new Scanner(System.in);
        //接受String类型
        String a,b;
        //输出结果
        while (cin.hasNext()) {
            a = cin.next();
            b = cin.next();
            BigDecimal a1=new BigDecimal(a);
            BigDecimal a2=new BigDecimal(b);
            System.out.println(a1.add(a2));
            System.out.println(a1.multiply(a2));
        } 
        cin.close();

字符串读入一行再转化明显快于单个读入

import java.util.*;

public class Main {

  public static void main(String[] args) {
    Scanner read = new Scanner(System.in);
    int n = read.nextInt();
    read.nextLine();
    double ans=0.0, a1=-1, a2=1e18, x;
    String[] line = read.nextLine().split(" ");
    for (String str : line) {
      x=Double.parseDouble(str);// Double.parseDouble(str)是把String字符串转换成Double的封装类
      ans+=x;
      if(x>a1) a1=x;
      else if(x<a2) a2=x;
    }
    System.out.println(String.format("%.2f", (ans - a1 - a2) / (n - 2)));
    read.close();
  }
}
全部评论

相关推荐

2025-12-18 18:50
已编辑
门头沟学院 golang
牛客33637108...:重点是要事已密成,在没有进入这家公司之前,不要有任何的泄露信息,我之前跟你一样,面了一家光伏设备厂,底薪7500加上出差补贴大概有13,000左右,已经给了口头offer了,甚至要了我的在校成绩的所有信息,还向我要了三方的网签二维码,到后面还是毁约了,我干过最愚蠢的事情就是向同学透露要签三方的事,之后的失败只会让他们幸灾乐祸,这是即将结束的大学生活给我的最后一课,不要相信任何的口头三方,该面的就去面,甚至签了三方也有毁约的可能,就像我现在签了三方还在外面实习呢,春招还是要继续参加的,不能停止面试,不然到后面毁三方的时候,重新捡起的面试很麻烦的,这是我一点点小小的见解。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务