数字与字符串相互转换,进制相互转换,浮点型为什么会丢失精度(打印浮点型数字与预期不一致)

1字符串转数字

String s = "123";

byte b = Byte.parseByte(s);
short t = Short.parseShort(s);
int i = Integer.parseInt(s);
long l = Long.parseLong(s);
Float f = Float.parseFloat(s);
Double d = Double.parseDouble(s);
boolean bo = Boolean.parseBoolean(s);
char c = Character.parseCharacter(s);


 2数字转字符串


int i = 7;
// 其中 value 为任意一种基本数据类型。
String s = String.valueOf(value);
特别注意:null不能调用方法,而""可以调用方法


String str2 = i + "";//第二种

Integer it = i;
String str3 = it.toString();//第三种

3进制转换

   // 十进制转成十六进制:
    Integer.toHexString(int i);

   // 十进制转成八进制

    Integer.toOctalString(int i);

    //十进制转成二进制

    Integer.toBinaryString(int i);


    //十六进制转成十进制

    Integer.valueOf("FFFF",16).toString();

    //八进制转成十进制

Integer.valueOf("876",8).toString();

    //二进制转十进制

Integer.valueOf("0101",2).toString();

 4一步到位进制转换(前提是数据类型转换得完成)

        java.lang.Integer类
        parseInt(String s, int radix)

        使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

        examples
        先将数字转字符串
        parseInt("0", 10) returns 0

        parseInt("473", 10) returns 473

        parseInt("+42", 10) returns 42

        parseInt("-0", 10) returns 0

        parseInt("-FF", 16) returns -255

 5测试

package w3day4;

/**
 * @Title
 * @Author Eastlin
 * @Description:
 */
public class MyTest {
    public static void main(String[] args) {
        int[] nums=new int[]{-11,12,13,14};
        int[] bases=new int[]{2,8,10,16};
//进制转换有两种选择-----直接转换和间接转换
        //二、八、十、十六进制转十进制
        for (int i = 0; i <4 ; i++) {
            String str=String.valueOf(nums[i]);
            System.out.print(Integer.parseInt(str, bases[i])+"\t\t");
        }
        System.out.println();
        //十六进制转成十进制
        System.out.println(Integer.valueOf("FFFF",16).toString());
        System.out.println("--------------------------------------------------------------------------");
        // 十进制转成十六进制:
        System.out.println(Integer.toHexString(15));
        // 十进制转成八进制
        System.out.println(Integer.toOctalString(15));
        //十进制转成二进制
        System.out.println( Integer.toBinaryString(15));
    }
}


6 float,double精度丢失原因

精度丢失原因是为什么? 因为我们要看到的是十进制浮点数,而确定的基本数据类型的二进制位数有限无法表示出能力之外的数据。

1/3为什么是无理数?因为这个是相对十进制而言,但是它相对3进制而言是0.1它不是无理数。 同理有些数据对十进制是有理数,但对二进制可能就是无理数,所以就丢失精度了。

因为计算机是以二进制存储,表示却是以十进制。以十进制传入,打印输出可能就出现丢失精度;反之概率更小。因为位数有限。

package w3day4;

/**

@Title
@Author Eastlin
@Description:
screentogif 可以搞动态图片
*/ //double会丢失精度的原因,有的有理数,在计算机二进制表示下就成了无理数
 //应该是太长了,可能还是有理数;IEEE754会对1舍入,0直接舍去

public class DoubleTest { public static void main(String[] args) { double i=1/3.0; System.out.println(i);

    double a=0.0;
    for(int j=1;j<=9;j++) {
        a += 0.1;
        System.out.print(a+"\t\t");
    }
    System.out.println();
    double b=0.1*9;
    System.out.println(a==b);
}
}
 //IEEE754标准 //32位,符(1)+"移码"(8)+尾数(23) //符号0正1负
 //移码=127+真值 //尾数=真值-1,尾数省略小数点前一位的1




 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值