zoukankan      html  css  js  c++  java
  • 类型自动转换规则

    参与运算(算术运算和赋值运算)的操作数结果类型必须一致,当不一致时满足下面条件,系统自动完成类型转换.


    1,两种类型兼容,例如:int和double兼容. (都同为数字)

    double number=3;   //前面我们定义的类型为double,但是注意我们赋值却是一个int值:3,系统自动转换成double类型3.0,所以程序在这里不会报错.

    Console.WriteLine("{0}",number);

    Console.ReadKey();


    2,目标类型大于源类型,例如:double>int.(double范围远远大于int类型)

    double pi=3.14;

    double r=5; //两种类型兼容系统自动完成类型转换成double类型5.0

    double area=r*r*pi;// r*r结果为int*pi(double),由于取值范围double大于int,在转换后不会丢失精度,所以在此处值为double类型[先将r*r值结果直接加.0转为double*pi(double),将最终为double的结果值赋给了double area]

    Console.WriteLine("面积={0}",area);

    Console.ReadKey();


    3,对于表达式,如果一个操作数为double类型,则整个表达式可提升为double类型

    int number1=10,number2=3;

    int ys=number1%number2;

    double quo=1.0*number1/number2;//注意此处如果不加1.0*输出结果是3.因为2个int类型的数相除结果还是int只是得出int类型的结果后系统加.0转为double.如果前加1.0*就是变成一个double类型的/一个int类型的结果就是double类型的 所以输出结果是3.333333333 如果一个操作数为double类型,则整个表达式可提升为double类

    Console.WriteLine("取余数={0} {1}",ys,quo);

    Console.ReadKey();


    同理:

    如下

    1,decimal number=3.14; //这里是无法将double类型的数值自动转换成deicmal类型的值,因为double的取值范围比decimal大。只能取值范围小的赋给大的

    正确写法应该是

    decimal number=3.14m;


    2,

    decimal number=3.14m;

    double number2=number;//这里也是无不将decimal值赋值给double的,虽说double取值范围比decimal大,但是double取值精度没有decimal的高。转换后会丢失精度所以不能转换。这里程序也会自动报错.


    3,

    decimal number=3 //此处是可以将int类型的转化成decimal类型的

  • 相关阅读:
    CUDA Error
    yolo v3 loss=nan, Avg loss=nan的一种原因
    C++ LinearRegression代码实现
    C++ 常用数学运算(加减乘除)代码实现 Utils.h, Utils.cpp(有疑问欢迎留言)
    C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码
    Leetcode 1005. Maximize Sum Of Array After K Negations
    Leetcode 1006. Clumsy Factorial
    Leetcode 617. Merge Two Binary Trees
    Leetcode 477. Total Hamming Distance
    python进制转换
  • 原文地址:https://www.cnblogs.com/swlq/p/5353295.html
Copyright © 2011-2022 走看看