Java中 单引号 数字判断相等 StringBuilder

单引号和双引号输出的区别

  • 区别1:java中的单引号表示字符,java中的双引号是字符串。
  • 区别2:单引号引的数据一般是char类型的;双引号引的数据 是String类型的
  • 区别3:java中单引号里面只能放一个字母或数字或符号;java中的双引号里面是0到多个字符构成。所以字符可以直接转换成字符串。字符串需要使用charAt(n) 来获取第几个字符。

char定义时用单引号,只能有一个字母,数字。char c='c';而String用双引号,可以是一个,也可能是多个字母,汉字等。就是所谓的字符串。String s="adsaf";
char只是一个基本类型,而String 可以是一个类,可以直接引用。比如char c='c';不能直接对c调用方法。String s="abc"; 这时可以调用s.charAt(0);等方法,因为String是类,这是就是对象的调用了。

错误示例

if (string.equals('是')) {
    String.format("数字的正负表示:%+d %d %+d %d",8,8,-8,-8);
}

equals() 会判断大小写区别,equalsIgnoreCase() 不会判断大小写区别

StringBuilder重用 清空数据方法

在平时的开发中,StringBuilder用的还是比较常见的,主要是用于优化String字符串的拼接操作。StringBuffer:线程安全的

public class Buffer {

  public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    sb.append("1111\n");
    sb.append("222\n");
    System.out.println(sb.toString());
    sb.setLength(0); //清空
    sb.append("5555\n");
    System.out.println(sb.toString());
  }
}

Java Integer/Long类型是否相等

Integer/Long类型的值在-128到127之间会使用缓存,超过就会创建一个对象,所以使用==判断两个值是相等的也会false。若没有超过这个范围,使用==也是可以进行判断的。

  • 推荐用equals(),这个还可以避免一些空指针问题的出现
  • 使用Integer.intValue();这样出来的就是int值,就可以直接比较了(可能会抛出空指针异常);
  • 使用Integer.longValue();这样出来的就是long值,就可以直接比较了(可能会抛出空指针异常);
Long a = 400l;
Long b = 400l;
System.out.println(a.longValue() == b.longValue());

Integer a = 400;
Integer b = 400;
System.out.println(a.intValue()== b.intValue());

两个浮点数是否相等

不论是float还是double都是浮点数,计算机是二进制,浮点数会失去一定的精确度。

 /**
  *  两个浮点数直接判断
  */
double value1 = 0.9 - 0.8;
double value2 = 0.8 - 0.7;
System.out.println(value1 == value2); // false

/**
* 用BigDecimal判断两个浮点数是否相等-compareTo
* 两个值相等,则返回值为0,否则返回值为-1
*/
BigDecimal bigDecimalValue1 = BigDecimal.valueOf(0.9).subtract(BigDecimal.valueOf(0.8));
BigDecimal bigDecimalValue2 = BigDecimal.valueOf(0.8).subtract(BigDecimal.valueOf(0.7));
System.out.println(bigDecimalValue1.compareTo(bigDecimalValue2));

#保留2位小数
String.format("%.2f", "0.3265");

浮点数保留指定小数位

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Objects;

/**
 * 提供常用数值操作的工具类,如格式化、加减乘除等.
 */
public class NumberUtil {

  /**
   * 格式化浮点数,使其保留指定的小数位数.
   *
   * @param number 待格式化的浮点数
   * @param digit  小数位数
   * @return 格式化后的字符串
   * @throws NullPointerException     如果输入的数字或小数位数为null
   * @throws IllegalArgumentException 如果小数位数小于0
   */
  public static String floatFormat(Double number, Integer digit) {
    Objects.requireNonNull(number, "数字不能为空");
    Objects.requireNonNull(digit, "小数位数不能为空");
    if (digit < 0) {
      throw new IllegalArgumentException("小数位数无效");
    }

    NumberFormat format = NumberFormat.getNumberInstance();
    //禁用数字的分组(即去掉逗号)
    format.setGroupingUsed(false);
    format.setMaximumFractionDigits(digit);
    format.setRoundingMode(RoundingMode.UP);
    return format.format(number);
  }

  /**
   * 计算两个浮点数的和,并返回保留指定小数位数的结果.
   *
   * @param a     第一个加数
   * @param b     第二个加数
   * @param digit 小数位数
   * @return 相加后的结果字符串
   * @throws NullPointerException     如果任一操作数或小数位数为null
   * @throws IllegalArgumentException 如果小数位数小于0
   */
  public static String floatAdd(Double a, Double b, Integer digit) {
    Objects.requireNonNull(a, "第一个数不能为空");
    Objects.requireNonNull(b, "第二个数不能为空");
    Objects.requireNonNull(digit, "小数位数不能为空");
    if (digit < 0) {
      throw new IllegalArgumentException("小数位数无效");
    }

    BigDecimal num1 = BigDecimal.valueOf(a);
    BigDecimal num2 = BigDecimal.valueOf(b);
    BigDecimal sum = num1.add(num2);
    return sum.setScale(digit, RoundingMode.UP).toString();
  }

  /**
   * 计算两个浮点数的差,并返回保留指定小数位数的结果.
   *
   * @param a     被减数
   * @param b     减数
   * @param digit 小数位数
   * @return 相减后的结果字符串
   * @throws NullPointerException     如果任一操作数或小数位数为null
   * @throws IllegalArgumentException 如果小数位数小于0
   */
  public static String floatSubtract(Double a, Double b, Integer digit) {
    Objects.requireNonNull(a, "第一个数不能为空");
    Objects.requireNonNull(b, "第二个数不能为空");
    Objects.requireNonNull(digit, "小数位数不能为空");
    if (digit < 0) {
      throw new IllegalArgumentException("小数位数无效");
    }

    BigDecimal num1 = BigDecimal.valueOf(a);
    BigDecimal num2 = BigDecimal.valueOf(b);
    BigDecimal result = num1.subtract(num2);
    return result.setScale(digit, RoundingMode.UP).toString();
  }

  /**
   * 计算两个浮点数的乘积,并返回保留指定小数位数的结果.
   *
   * @param a     第一个因数
   * @param b     第二个因数
   * @param digit 小数位数
   * @return 相乘后的结果字符串
   * @throws NullPointerException     如果任一操作数或小数位数为null
   * @throws IllegalArgumentException 如果小数位数小于0
   */
  public static String floatMultiply(Double a, Double b, Integer digit) {
    Objects.requireNonNull(a, "第一个数不能为空");
    Objects.requireNonNull(b, "第二个数不能为空");
    Objects.requireNonNull(digit, "小数位数不能为空");
    if (digit < 0) {
      throw new IllegalArgumentException("小数位数无效");
    }

    BigDecimal num1 = BigDecimal.valueOf(a);
    BigDecimal num2 = BigDecimal.valueOf(b);
    BigDecimal result = num1.multiply(num2);
    return result.setScale(digit, RoundingMode.UP).toString();
  }

  /**
   * 计算两个浮点数的商,并返回保留指定小数位数的结果.
   *
   * @param a     被除数
   * @param b     除数
   * @param digit 小数位数
   * @return 相除后的结果字符串
   * @throws NullPointerException     如果任一操作数或小数位数为null
   * @throws IllegalArgumentException 如果小数位数小于0
   * @throws ArithmeticException      如果除数为0
   */
  public static String floatDivide(Double a, Double b, Integer digit) {
    Objects.requireNonNull(a, "第一个数不能为空");
    Objects.requireNonNull(b, "第二个数不能为空");
    Objects.requireNonNull(digit, "小数位数不能为空");
    if (digit < 0) {
      throw new IllegalArgumentException("小数位数无效");
    }
    if (b.equals(0.0)) {
      throw new ArithmeticException("除以0异常");
    }

    BigDecimal num1 = BigDecimal.valueOf(a);
    BigDecimal num2 = BigDecimal.valueOf(b);
    BigDecimal result = num1.divide(num2, digit, RoundingMode.HALF_UP);
    return result.setScale(digit, RoundingMode.HALF_UP).toString();
  }

  /**
   * 判断两个浮点数是否在指定精度下相等。
   *
   * @param a     第一个浮点数
   * @param b     第二个浮点数
   * @param scale 比较时保留的小数位数
   * @return 如果两个数在指定精度下相等则返回 true,否则返回 false
   */
  public static boolean isEqual(double a, double b, int scale) {
    BigDecimal numA = BigDecimal.valueOf(a);
    BigDecimal numB = BigDecimal.valueOf(b);
    // 设置精度并进行比较
    return numA.setScale(scale, RoundingMode.HALF_UP)
        .compareTo(numB.setScale(scale, RoundingMode.HALF_UP)) == 0;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值