数据类型转换_数据类型转换问题 - CSDN
精华内容
参与话题
  • 数据类型转换

    2019-07-20 12:57:02
      在程序中,当把一种数据类型的值赋给另一个数据类型的变量时,需要进行数据类型转换数据类型转换可分为两种:自动类型转换和强制类型转换。 自动类型转换   自动类型转换也叫隐式类型转换,指的时两种数据...

      在程序中,当把一种数据类型的值赋给另一个数据类型的变量时,需要进行数据类型转换。
      如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换则必然会有信息丢失,有可能失败。

    数据类型转换可分为两种:自动类型转换和强制类型转换。

    • 自动类型转换

      自动类型转换也叫隐式类型转换,指的时两种数据类型在转换的过程中不需要显示地进行声明。要实现自动类型转换,必须满足两个条件:1.两种数据类型彼此兼容。2.目标类型的取值范围大于原类型的取值范围。
      整数类型之间可以实现转换,如byte类型的数据可以赋值给short,int,long类型的变量。short,char类型的数据可以赋值给int,long类型的变量。int类型的数据可以赋值给long类型的变量。

    默认转换:byte,short,char -> int -> long -> float -> double

    • 强制类型转换
        强制类型转换也叫显示类型转换,指的是两种数据类型之间的转换需要进行显示的声明。当两种类型彼此不兼容,或者目标类型取值小于原类型时,自动类型转换无法进行,此时需要进行强制类型转换。
        boolean类型不能转换为其他的数据类型

    强制类型转换:目标类型 变量名 = (目标类型)(被转换的数据)

    int a = (int) 3.15;	//此时输出a的值为 45
    long b = (long)312.12F;	//此时输出b的值为312
    int c= (int)'d';	//此时输出b的值为100,在Unicode表中d的位置是100
    
    展开全文
  • 基本数据类型转换概述 a 为什么需要数据类型转换? 因为Java是强类型语言,在Java中要求进行"赋值运算"和"算术运算时",参与运算的 数据类型必须保持一致! b 数据类型转换的方式有哪些? a.隐式类型转换,...

    基本数据类型转换概述

    A 为什么需要数据类型转换?
    因为Java是强类型语言,在Java中要求进行"赋值运算"和"算术运算时",参与运算的
    数据类型必须保持一致!

    B 数据类型转换的方式有哪些?
    1)隐式类型转换,无序程序员动手操作,自动转换
    2)显示类型转换,需要程序员手动处理

    3) 基本数据类型中,哪些类型的数据可以互相转换?
    除boolean型外,其他七种类型的数据在计算机内存储的都是数值,所以,除了boolean,
    其他七种都可以相互转换

    1.隐式类型转换

    隐式类型转换原则:从低字节向高字节转换。通俗讲,就是从容量小的数据类型转向
    容量大的数据类型
    byte–>short–>int–>long–>float–>double
    char–>int(char只能和int相互转换)

    1.1 在赋值运算中,基本都遵循隐式转换规则,但是有一个特例:

    byte num = 125; //基本数据类型中已经说过,所有自然整数都属于整数型固定值
    //常量,他们的默认值都是int,那么 125的默认值就是int,但是num是byte型,
    //按照隐式类型转换规则,这是不可行的,为什么编译不报错,程序正常运行?
    

    这就是一个特例:把int型常量赋给byte,short和char类型时,属于自动转换的特例
    只需要不超过byte、short、char的表数范围即可

    总结一下这个特例的两个条件:
    a.从int型转为byte、short、char
    b.不超出byte、short、或char的表数范围
    只要满足以上2个条件,那么它就属于自动转换的特例,不受规则限制

    1.2 在算术运算中,全部都遵循隐式转换规则:
    如果两个操作数其中一个为double,那么另一个也自动转为double
    否则,如果其中一个为float,那么另一个也自动转为float
    否则,如果其中一个为long,另一个也转为long
    否则,两个数都转为int

    2.显示类型转换

    显式类型转换即强制类型转换
    2.1 什么时候需要强制类型转换?
    自动类型无法实现时,那么我们就需要手动进行强制类型转换
    2.2 强制类型转换的语法
    语法:目标变量类型 变量名|常量名 = (目标变量类型)变量|常量;
    2.3 强制类型转换的注意点
    1)强制类型转换后的数据的数据类型保持不变

    int num1 = 10;
    byte num2 = (byte)num1;//此处强转之后num1依旧为int类型
    

    2)如何把一个小数转换为整数?

    int num2 = (int)3.14;
    

    3 )使用强制类型转换的时候需要慎重,可能会丢失精度

    int num1 = 128;
    byte num2 = (byte)num1;//输出:-128
    
    展开全文
  • java基本数据类型之间的转换

    万次阅读 2019-01-23 13:35:29
    1、数据类型的分类     2、比较数据类型之间的字节大小  1字节=8位 、 3、转换中的知识点 *java中整数类型默认的int类型;小数类型默认的double; *String的字符串转化为char类型时,只能用char类型的...

     

    1、数据类型的分类

     

     

    2、比较数据类型之间的字节大小

                1字节=8位

    3、转换中的知识点

    *java中整数类型默认的int类型;小数类型默认的double;

    *String的字符串转化为char类型时,只能用char类型的数组来接收;字符串在转化成char类型是不能像int、float那样使用封装类的parseXXX方法等,但它可以转换成char类型的数组;
     自己心得:byte de=(byte) 128;System.out.println(de); 结果:-128
    //如果数字溢出当前的数字类型,有两种方法可以阻止其出错,一种是直接强转成 当前数据类型,另一种是转成其他的数据类型(较大的)

    //在进行数据类型转换时,两个char类型的数字相加强转成char时,会对应成字符编码里面的,但大多都会
     //出现乱码,一个char类型的数字,一个字符如‘a’相加,最后结果会对应字符编码里面的,并输出相对应的字符;
    //如果是提升为int类型时,不论是两个char类型的数字相加,还是一个char类型的字符和一个数字最后的结果都是数字 
     
    例如:  

    char c=12;
    char c1=12;
    char c4='a';
    char c5=28;
    char sa='a';
    char sa1='b';
    
    int c3=c+c1;
    int c7=c4+c5;
    
    char c2=(char) (c+c1); 
    
    char c6=(char) (c4+c5); 
    
    char sa3=(char) (sa+sa1);   
    
    System.out.println("**********");    
    System.out.println(c2);
    System.out.println(c6);
    System.out.println(sa3);
    System.out.println("**********");
    
    System.out.println(c3);
    
    System.out.println(c7);

    结果:

    *String的字符串进行类型转换时,如果字符串中包含long整形的字符大写L或者小写l时,在转换成字符串时,会出现错误

    例如:    String str="123L";
                  long str1=Long.parseLong(str); 
                  System.out.println(str1);//结果:错误

    *String的字符串是float、double浮点型时,字符串可以加f、F、D、d等,在进行基本类型转换时不会出错

     例如:   String f1="12.34f";

                  float f2=Float.parseFloat(f1); 

                  System.out.println(f2);//结果:12.34,;d、D也一样

        

    4、转换

    *自动类型转换(也叫隐式类型转换) ,其实就是小范围的数据类型向大范围的数据类型转换,例如int类型转long

    *强制类型转换(也叫显式类型转换) int b = (int)(i + j);

    *强制类型转换在某种情况下会丢失精度      

    *表达式的数据类型自动提升

    5进行四则运算时

    a、所有的byte型、short型和char的值将被提升到int型

    b、如果一个操作数是long型,计算结果就是long型

    c、如果一个操作数是float型,计算结果就是float型

    d、如果一个操作数是double型,计算结果就是double型

    e、如果一个操作数是String型,计算结果就是String型

    *面试陷阱

    byte b1 = 10;
    byte b2 = 20;
    //错误: 不兼容的类型: 从int转换到byte可能会有损失
    //否则,两个操作数都将转换为int类型。
    byte b3 = b1 + b2 //错误,b1+b2是int类型,java的整数默认类型为int,b3是byte类型,二者类型不同,所以出错
    byte b3 = (byte)(b1 + b2); //正确

    *面试陷阱2:

    short s1 = 10; 
    s1 = s1 + 12; //错误: 不兼容的类型: 从int转换到short可能会有损失
    
    short s2 = 10; 
    s2 += 12; // 等同于short s2 = (short)(s2 + (short)1); //正确
    展开全文
  • c/c++基础篇之数据类型转换

    千次阅读 2018-06-05 17:17:43
    C/C++常见的数据类型转换1. 常见的单类基本类型转换(1)强制类型转换如: int a=(int)(9.87) 结果a=9 char c=(char)(97) 结果为c=’a’ 特别注意的是,在c++11中,增加了auto关键字,转换类型相对智能化 auto c...

    C/C++常见的数据类型转换

    1.      常见的单类基本类型转换

    (1)强制类型转换

    如: int a=(int)(9.87)  结果a=9

     char c=(char)(97)  结果为c=’a’

      特别注意的是,在c++11中,增加了auto关键字,转换类型相对智能化

         auto c=(int)(9.87)   结果c=9

    (2)string与char * ,char arr[]

    String----const char *

      c_str()生成一个constchar*指针,指向以空字符终止的数组。

      例1:const char *c;  string s=”1234”; c=s.c_str();cout<<c;  输出结果为1234

      例2:string str=”lol”; char * ptr=new char[str.length()+1]; strcat(ptr,str)

     

    String---char s[]

      可以利用strcpy函数(需先转换成constchar *)或者利用循环对字符数组逐一赋值

      例:string s(‘test’);char str[10];

     strcpy(str,s.c_str())

     for(inti=0;i<s.length();i++) {str[i]=s[i]}

     

    char s[]与char *------string

      可以直接赋值 char *ptr; char arr[];  string s1=ptr;  string s2=arr;

                     

    (3)char *与int

       头文件:#include<stdlib.h>

    atoi() 函数用来将字符串转换成整数(int),其原型为:intatoi (const char * str);

    例:char *numchars="1234"; int num=atoi(numchars);  结果为1234

     

    itoa()函数用于整数到字符串的转换,其原型为:char*itoa(int value, char *string, int radix);

    例:int num=1234;  int radix=8;  char res[20];  itoa(num,res,radix);

        printf("%d(10)=%s(%d)\n",num,res,radix);//输出1234(10)=2322(8) 这里radix指的是进制

     

    同时c++还提供标准库函数有:long int atol ( const char * str ); double atof (constchar* str);

    stof()、strtod()、strtol()、strtoul()、atoll()、strtof()、strtold()、strtoll()、strtoull(),详情可在网上查阅。

    (4)string与int

       利用stoi()直接转换

       例:string s=”1234”;int b=stoi(s)  结果为1234

       利用atoi()间接转换

       例:string s=”1234”;int b=atoi(s.c_str())  结果为1234

     

    (5)sprintf作用是将printf的输出结果保存在字符串数组中。

             

    2.一些特殊的数据类型转换

    (1)type b= static_cast<type>(a) 将type1 a的类型转化为type2 b的类型;

    使用范围:完成编译器认可的隐式类型转换,但不支持指针与常见的int、float等类型转换。

    基本数据类型之间的转换,如int->double;

    int a = 6;

    double b = static_cast<int>(a);

    派生体系中向上转型:将派生类指针或引用转化为基类指针或引用(向上转型);

    class base{       ….    }

    class derived : public base{      ….    }

    base *b;

    derived *d = new derived();

    b = static_cast<base *>(d);

    (2) dynamic_cast

    功能:执行派生类指针或引用与基类指针或引用之间的转换

    格式:

    ①其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行运行时类型检查;

    ②不能用于内置的基本数据类型的强制转换。 dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

    ③使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过。

    需要检测有虚函数的原因:类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。

    这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表(关于虚函数表的概念)中,只有定义了虚函数的类才有虚函数表。

    ④在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比 static_cast更安全。向上转换即为指向子类对象的向下转换,即将父类指针转化子类指针。向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。可以实现向上转型和向下转型,前提是必须使用public或protected继承;

    例子:

    向上转型:

    class base{       …     };

    class derived : public base{      …     };

    int main()

    {

    base *pb;

    derived *pd = new derived();

    pb = dynamic_cast<base *>(pd);

    return 0;

    }

     

    向下转型:

    class base{       virtualvoid func(){}           };

    class derived : public base{      void func(){}      };

    int main()

    {  base*pb = new base();

    derived *pd = dynamic_cast<derived*>(pb);//向下转型

    return 0;  }

    (3) const_cast

    只能对指针或者引用去除或者添加const属性,对于变量直接类型不能使用const_cast;不能用于不同类型之间的转换,只能改变同种类型的const属性。

    如:

    const int a= 0;   int b = const_cast<int>(a);//不对的

     

    const int *pi = &a;  int * pii = const_cast<int *>pi;//去除指针中的常量性,也可以添加指针的常量性;

    const_cast的用法:const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。

    (4)reinterpret_cast

    interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值.有着和C风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用


    展开全文
  • 1、隐式转换 C在以下... 1、算术运算式中,低类型能够转换为高类型。  2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。  3、函数调用中参数传递时,系统隐式地将实参转换为形参的...
  • ■■■■■■■数据类型转换■■■■■■■ Java是一门强类型语言,如果两个数据类型不一致,那么是不能参与运算的,需要进行来行的转换,转成同一种类型才可以运算。 ■自动转换/隐式转换 由编译器自己完成转换...
  • 数据类型和运算符

    2020-08-19 23:23:49
    标识符 标识符:在Java中对类名、变量名、方法名等这些要素进行命名的字符序列称为标识符。 通俗的理解:凡是程序员自己命名的地方都叫做标识符。 1、标识符的命名规则(必须遵守,否则编译或运行错误) ...
  • JAVA基础,语法 1.JAVA跨平台原理(字节码,虚拟机) java源程序(扩展名.java)---->java字节码文件(扩展名.class)---->java虚拟机(JVM)—>执行代码 字节码文件不面向任何具体平台,只面向虚拟机 ...
  • 文章目录值类型值类型详细信息运算符种类小知识:为什么null是object...||typeof操作符可区分为6种数据类型注意数据类型转换显示类型转换parseInt详解toFixed详解隐式类型转换运算符种类 值类型 原始值: Number...
  • 运算符 数据类型转换
  • 数据类型转换三种方式

    千次阅读 2019-09-01 23:43:53
    数据类型转换包括: 一、自动类型转换 自动类型转换需满足的的条件: ①.两种类型必须兼容 ②.目标类型大于源类型 例如: int a = 7; double b = a; 二、强制类型转换 强制类型转换需满足的的条件: ...
  • 几种常见的转换数据类型的方法

    千次阅读 2018-08-15 12:19:01
    后台各种数据强转: Convert. 前台数据转int : parseInt()
  • pandas的dataframe如何更改数据类型

    万次阅读 多人点赞 2019-04-13 20:01:54
    pandas的dataframe数据类型转换 在使用pandas库进行数据分析时,有时候会需要将object类型转换成数值类型(float,int),那么如何做呢? 主要有以下三种方法:创建时指定类型,df.astype强制类型转换,以及使用pd....
  • - 调用基本数据类型对应的包装类中的方法 parseXXX(String) 或 valueOf(String) 即可返回相应基本类型。 - 一种方法是将基本数据类型与空字符串("")连接(+)即可获得其所对应的字符串;另一种方法是...
  • 从 varchar 数据类型到 datetime 数据类型转换产生一个超出范围的值 这个varchar格式是没错的,是因为datetime这个数据类型有时间数值的范围限定,当超出时间范围时就抛出这个错误。 如果类型是“datetime” ...
  • 这里说的是存储过程里可能出现的错误 比如 USE [School] GO alter Procedure [dbo].[S_Get_Student] ( @sex int --性别 sex:1(男)2(女) ... declare @sql varchar(max)--可以包含很多很多字符 ...
  • 数据类型 varchar 转换为 numeric 时出错的查找办法 总结原因有以下几点: 1、有null值; 2、有“”值; ISNUMERIC 确定表达式是否为一个有效的数字类型。 下面这几个值,用sql函数ISNUMERIC()用查不出来...
  • 纠结了好几天了,就是不停的报错,网上说什么有ab什么字符在里面,我百般查找,各种报错最后才发现有一个误区,就是你insert的时候存进去的''不会变成null,只是空值,空值和null是不一样的。当你往里面存''的时候,...
  • python numpy 数据类型转换

    万次阅读 多人点赞 2018-02-07 09:44:40
    python numpy 数据类型转换 numpy数据类型转换需要调用方法astype(),不能直接修改dtype。调用astype返回数据类型修改后的数据,但是源数据的类型不会变,需要进一步对源数据的赋值操作才能改变。例如 >>> a=np....
  • JS 数据类型 通过函数进行类型转换 String Number 之间的想换转换 自动类型转换 目录导航 类型判断 typeof JS 中可以使用关键字 typeof 判断 demo typeof "hello" typeof true typeof...
1 2 3 4 5 ... 20
收藏数 1,541,606
精华内容 616,642
关键字:

数据类型转换