Home > Article > Backend Development > C# Learning Diary 06---Data Type of Floating Point Number Type
Floating point number type of numerical type:
In our daily life, there are not only integers, but also decimals. In C#, there are two data types for decimals: (single precision) float, (double precision) )double.
The difference between them is that the value range and precision are different. The computing speed of the computer for floating point numbers is much lower than the computing speed for integers. The computing speed for double types is lower than the computing speed for floats. If in the program Extensive use of double-precision floating-point numbers will occupy more memory units, and the computer's processing tasks will be more arduous. However, the results using double types will be more accurate than floats, so the precision requirements are not very high. In this case we can use float type.
Single precision (float) type: The value range is between plus and minus 1.5*10^-45 to 3.4*10^38, and the precision is 7 to 8 digits;
Double precision (double) type: The value range is between plus and minus 5.0*10^-324 to 1.7*10^308. The precision is 15 to 16 digits;
I will write a program to distinguish:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Program { static void Main(string[] args) {//同一类型在同一行定义时 用 , 分开 float a = 3.0f,b = 10.0f; //这里注意定义float时 加上f/F 应为默认小数是double类型 float c = b / a; //相除 double d = 3.0, e = 10.0; double f = e/d; Console.WriteLine("float c={0}\ndouble f={1}",c,f); //输出 "\n" 表示换行 } } }
Comparison of results:
In the spirit of truthfulness, I carefully counted the float result, which has 8 digits, 7 of which are numbers; the double result has 16 digits, among which The 15th digit is the number 3;
In an introspective manner, I reflected on the properties of float and double. Isn’t the range of float between plus and minus 1.5*10^-45 to 3.4*10^38? ? It can represent at least 38 digits, which is only 7 digits. Double can at least represent more than 300 digits, which is only 16 digits. What I wrote is 10/3. The result should be 38 3's, or more than 300 3's. That's right. ? ? ? Why? ? ? Is it rounding off between the 9th and 17th digits? I wrote the following code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Program { static void Main(string[] args) { float a = 3.333334444333333f; //第8位(小数点也算一位)开始是4,第9位是4 double d = 3333333333333.3455555544; //第16位是4,17位是5 Console.WriteLine("float c={0}\ndouble f={1}",a,d); //输出 "\n" 表示换行 } } }
The result is like this:
Sure enough, the 8th bit of float is 4 and has been rounded off to 0. The 16th bit of double is originally 4. Since the 17th bit is 5, 1 is added, and the following 0 is omitted. .
The above is the content of C# Learning Diary 06---Data Type of Floating Point Number Type. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!