Java中的数字处理

Java中有时遇到对数字的处理,以下总结了一些常见的数字处理方式。

基本数学运算

我们可以用Math类,其中包含用了于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

数字与字符串的转换

这里以int类型和字符串的转换为例。如下:

public class NumberString {
    public static void main(String[] args) {
        int number = 100;
// 数字转字符串
//      方式1 字符串拼接
        String str1 = ""+number;
        System.out.println(str1);

//      方式2 String.valueOf() 方法
        String str2 = String.valueOf(number);
        System.out.println(str2);

//      方式3 基础数据包装类型中的toString()方法
        String str3 = new Integer(number).toString();
        System.out.println(str3);

//      方式4 基础数据包装类型中的toString(DataType data)方法
        String str4 = Integer.toString(number);
        System.out.println(str4);

// 字符串转数字
        String str = "100";
//      方式1 Integer.parseInt(String str)
        int i1 = Integer.parseInt(str);
        System.out.println(i1);

//      方式2 Integer . intValue()
        int i2 =  new Integer(str).intValue();
        System.out.println(i2);

    }

}

精确计算

由于浮点数在计算时,得到的是近似的结果,结果不一定精确。
如:

System.out.println(32.0-31.1);

结果为0.8999999999999986

为了解决类似的问题,可使用BigDecimal类。如下:

//创建两个数的BigDecimal对象,并调用subtract方法
    System.out.println(new BigDecimal("32.0").subtract(
           new BigDecimal("31.1")));

长整数计算

对于较长整数的计算,可用BigInteger类来实现。BigInteger对象可表示不可变的任意精度的整数。BigInteger除了提供基本的数学运算方法,还提供了质数测试、素数生成等其他操作。

如这样的一道题:“计算A/B,其中A是不超过1000位的正整数,B是个位数,要求计算商数Q和余数R,使得A = B * Q+ R成立”。

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

public class Division {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 输入的第一个字符串作为被除数A,并转为BigInteger类型
        BigInteger numberA = new BigInteger(sc.nextLine());
        // 输入的第二个字符串作为除数B,并转为BigInteger类型
        BigInteger numberB = new BigInteger(sc.nextLine());
        sc.close();

        // 将商和余数存入BigInteger类型数组
        BigInteger[] dR = numberA.divideAndRemainder(numberB);
        // 获取并输出商和余数
        System.out.println("商为:"+dR[0].toString()+"余数为:"+dR[1].toString());


    }
}

随机数的获取

//  方式1 Math.random() 
//  该方法返回一个位于[0.0,1.0)之间的浮点数
        // 获取一个60-100的随机数
        int randomNumber1 = (int)(Math.random() * 40 + 60);
        System.out.println(randomNumber1);

//  方式2 Random类
//      nextInt(int n)方法 返回的是一个位于[0,n)之间的int值
//      nextDouble() 方法 返回一个位于[0.0,1.0)之间的浮点数
        Random r = new Random();

        int randomNumber2 =r.nextInt(15);
        int randomNumber3 = (int)(r.nextDouble() * 40 + 60);

        System.out.println(randomNumber2);
        System.out.println(randomNumber3);

多位数中单个数字的获取

我们可以对多位数逐位求余,也可以将多位数转为字符串处理。
如下:

public class Digits {

    public static void main(String[] args) {
        int number = 1232414345;
//方式1 逐位求余  
        while(true){
            if(number < 10) {
                System.out.println(number);
                break;
            } else {
                int digit = number % 10;
                 System.out.println(digit);
                 number /= 10;
            }

        }

//方式2 转为字符串处理 
        String numberStr = String.valueOf(number);

        for(int i=0; i<numberStr.length(); i++){
            System.out.println(numberStr.charAt(i));
        }


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** * @project: WebProjectUtil * @class: NumberUtil * @describe: 此工具类用来处理数字方面的逻辑, * 如返回指定位数的随机数字、Double的加减乘除精确运算、指定位数数字用“0”补齐 * @autho: Administrator * @date: 2013-6-7 下午02:26:27 * @alter: Administrator * @alterDate: 2013-6-7 下午02:26:27 * @alterRemark: * @version V1.0 */ public class NumberUtil { private static final int DEF_DIV_SCALE = 2; /** * @return 返回12位随机数 */ public static String randomNumber() { } /** * @param parm * @return 返回指定位数随机数 */ public static String randomNumber(int parm) { } /** * * 两个Double数相加 * * @param v1 * @param v2 * @return Double */ public static Double add(Double v1, Double v2) { } /** * * 两个Double数相减 * * @param v1 * @param v2 * @return Double */ public static Double sub(Double v1, Double v2) { } /** * * 两个Double数相乘 * * @param v1 * @param v2 * @return Double */ public static Double mul(Double v1, Double v2) { } /** * * 两个Double数相除 * * @param v1 * @param v2 * @return Double */ public static Double div(Double v1, Double v2) { } /** * * 两个Double数相除,并保留scale位小数 * * @param v1 * @param v2 * @param scale * @return Double */ public static Double div(Double v1, Double v2, int scale) { } /** * 返回指定Double的负数 * @param v1 * @return */ public static Double neg(Double v1) { /** * @Title: toFixdLengthString * @Description: 将字符串用符号填充位数 * @param str 源字符串 * @param fixdlenth 位数 * @return String * @throws */ public static String toFixdLengthString(String str, int fixdlenth) { } /** * @Title: toFixdLengthString * @Description: 将数字用“0”填充位数 * @param num * @param fixdlenth * @return String * @throws */ public static String toFixdLengthString(int num, int fixdlenth) { } /** * @Title: generateSpaceString * @Description: 得到指定位数占位符 * @param length * @return String * @throws */ public static String generateSpaceString(int length) { } /** * @Title: generateZeroString * @Description: 得到指定位数的“0”的占位符 * @param length * @return String * @throws */ public static String generateZeroString(int length) { } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值