Java:科学计数法和判断变量的类型

原因

之前用C++敲代码,用科学技术法一直都是写的整数类型,现在到Java里面发现居然报错,是个浮点数。

//不报错
int a = 1e5 + 10;
//报错
int a = 1e5 + 10;
float a = 1e5 + 10;

//不报错
double a = 1e5 + 10;

关于Java的科学计数法

在Java中,当Double的取值符合某条件时,将会以科学计数法的方式显示(下面是个人测试的结果,非从文档中得到的结论):

@Test
public void testPrintScientificNotation() {
    //整数部分位数大于等于8时开始以科学计数法显示
    System.out.println(-12345678.0);
    System.out.println(12345678.0);
    //整数位为0,当小数位以0开始连续出现大于等于3时开始以科学计数法显示
    System.out.println(0.0001);
    System.out.println(-0.0001);
}
结果

-1.2345678E7
1.2345678E7
1.0E-4
-1.0E-4

很多时候,我们需要做一个统一,要么全部以科学计数法输出,要么就全部显示为普通计数。根据网上的资料,主要提及NumberFormat、DecimalFormat、BigDecimal这三种API实现方式。
(详情请看文末的参考)


***

0x表示

  • 如果你写一个0x80;那么会把这0,1位串在内存中铺开,并且是32位的一个int,不够32位,则前面补0。
  • 如果在强制转换成一个byte,则会把前面全部截掉,保留后8位。
  • 如果是0x80L,则是64位的。

一次如果你想直接用位来表示数字就可以写成0x的形式。


public class Test {
	
	public static void main(String[] args) {
		
		int a = 0x2f;//小写十六进制(等价于0x002f)
		System.out.println(Integer.toBinaryString(a));        //101111


		
		int b = 0x2F;//大写十六进制
		System.out.println(Integer.toBinaryString(b));        //101111
		
		int c = 10;//标准十进制
		System.out.println(Integer.toBinaryString(c));        //1010
		
		int d = 010;//以零开头,表示八进制
		System.out.println(Integer.toBinaryString(d));        //1000
		
		
		
		char e = 0xff;//char为2个字节,16位
		byte f = 0xf;//byte为8位
		short g = 0xff;//short为2个字节,16位
		System.out.println(Integer.toBinaryString(e));        //11111111
		System.out.println(Integer.toBinaryString(f));       // 1111
		System.out.println(Integer.toBinaryString(g));      //11111111
 
	}
}



判断变量类型

第一种:反射

使用反射的方法: 变量名.getClass().getSimpleName()来判断。这个可以判断科学计数法表示的变量,但需要强转Object类型

例:


public static void main(String[] args ){
        double a = 1e5 + 10;
//必须要转成object这样才能用反射判断类型
        Object aa = (Object)a;
        System.out.println( aa.getClass().getSimpleName() );
}


第二种:instanceof

这种也是无法直接判断,需要强转Object

public static void main(String[] args ){
        double a = 1e5 + 10;
        Object aa = (Object)a;
//注意这里不要instanceof int会报错,我尝试的时候还以为instance无法判断,后面想到可能是包装类的问题
        System.out.println( (aa instanceof  Integer ));
}

结果:


参考:

  1. 科学计数法
  2. 判断变量类型
  3. 0x
posted @ 2022-03-10 12:25  CodeWater  阅读(1342)  评论(0编辑  收藏  举报