014集——浮点数值类型——C#学习笔记

浮点类型的特征

C# 支持以下预定义浮点类型:

double a = 12.3;

System.Double b = 12.3;

每个浮点类型的默认值都为零,0。 每个浮点类型都有 MinValue 和 MaxValue 常量,提供该类型的最小值和最大有限值。 float and double 类型还提供可表示非数字和无穷大值的常量。 例如,double 类型提供以下常量:Double.NaN、Double.NegativeInfinity 和 Double.PositiveInfinity。

当所需的精度由小数点右侧的位数决定时,decimal 类型是合适的。 此类数字通常用于财务应用程序、货币金额(例如 $1.00)、利率(例如 2.625%)等。 精确到只有一个小数的偶数用 decimal 类型处理会更准确:例如,0.1 可以由 decimal 实例精确表示,而没有精确表示 0.1 的 double 或 float 实例。 由于数值类型存在这种差异,因此当你对十进制数据使用 double 或 float 时,算术计算可能会出现意外的舍入错误。 当优化性能比确保准确度更重要时,可以使用 double 代替 decimal。 然而,除了大多数计算密集型应用程序之外,所有应用程序都不会注意到性能上的任何差异。 避免使用 decimal 的另一个可能原因是为了最大限度地降低存储需求。

可在表达式中将整型类型与 float 和 double 类型混合使用功能。 在这种情况下,整型类型隐式转换为其中一种浮点类型,且必要时,float 类型隐式转换为 double。 此表达式的计算方式如下:

如果表达式中有 double 类型,则表达式在关系比较和相等比较中求值得到 double 或 bool。

如果表达式中没有 double 类型,则表达式在关系比较和相等比较中求值得到 float 或 bool。

你还可在表达式中混合使用整型类型和 decimal 类型。 在这种情况下,整型类型隐式转换为 decimal 类型,并且表达式在关系比较和相等比较中求值得到 decimal 或 bool。

不能在表达式中将 decimal 类型与 float 和 double 类型混合使用。 在这种情况下,如果你想要执行算术运算、比较运算或相等运算,则必须将操作数显式转换为 decimal 或反向转换,如下例所示:

double a = 1.0;

decimal b = 2.1m;

Console.WriteLine(a + (double)b);

Console.WriteLine((decimal)a + b);

double d = 3D;

d = 4d;

d = 3.934_001;

float f = 3_000.5F;

f = 5.4f;

decimal myMoney = 3_000.5m;

myMoney = 400.75M;

示例代码如下:

cs 复制代码
using System;
using System.Globalization;

namespace StringApplication
{
    class zz银行
    {
        protected decimal MyFortune = 0m;

        public zz银行()
        {
            /*m 后缀用于表示一个数值字面量是 decimal 类型的。decimal 类型用于需要高精度的财务和货币计算。
             * 它提供了比 float 和 double 类型更高的精度和更小的范围,非常适合处理金融数据。
            当你看到 0m 时,这意味着数字 0 被明确指定为 decimal 类型,而不是默认的 int、float 或 double 类型。
            这样做的好处是,你的代码意图更加清晰,
            同时也避免了在将整数或浮点数赋值给 decimal 变量时可能发生的隐式类型转换。*/
            MyFortune = 0m;
            
        }

        public void AddPenny(decimal i)
        {
            MyFortune += i ;
        }
        //扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现需要 override 修饰符。
        public override string ToString()
        {
            /*ToString 方法用于将数值、日期、时间等对象转换为它们的字符串表示形式。
             * 对于数值类型(如 decimal),ToString 方法可以接受一个格式字符串作为参数,以指定输出字符串的格式。*/
            var usFormat = new CultureInfo("en-US");
            //return " zz银行的余额为:" + MyFortune.ToString("C") ;¥人民币单位
            return " zz银行的余额为:" + MyFortune.ToString("C", usFormat); //$美元单位
            //return " zz银行的余额为:" + MyFortune.ToString("F5", usFormat); //$美元单位,保留5为小数,即F5
            /*关于 "C" 格式说明符:
            使用当前区域性的货币符号(如美元符号$、欧元符号€等)。
            根据需要添加千位分隔符。
            根据当前区域性的设置来格式化小数点后的数字(通常是两位,但这也取决于区域性的具体设置)。
            因此,如果 MyFortune 的值是 123.45m,并且当前线程的区域性设置为美国英语(en-US),
            那么 MyFortune.ToString("C") 将返回类似 "$123.45" 的字符串。
            如果当前线程的区域性设置为其他货币体系,返回的字符串将相应地反映该货币体系的格式。*/
        }

        public static void Main()
        {
            zz银行 bank = new zz银行();
            bank.AddPenny(2.666666m);
            Console.WriteLine(bank);
            Console.ReadLine();
        }
    }
}

在C#中,public override string ToString() 这句代码定义了一个方法(Method),这个方法重写了(Overrides)从基类继承而来的 ToString 方法。这里有几个关键点需要理解:

public:这是一个访问修饰符,表示这个方法是公开的,意味着它可以被任何其他类访问。

override:这个关键字用于指示该方法重写了基类中的虚方法(virtual method)或抽象方法(abstract method)。如果没有 override 关键字,并且基类中没有相应的虚方法或抽象方法,那么尝试定义这样一个方法将会导致编译错误。

string:这是方法的返回类型,表示该方法执行后将返回一个字符串(String)类型的值。

ToString:这是方法的名称。ToString 方法在.NET中是一个非常特殊的方法,因为几乎所有.NET对象都继承自 System.Object 类,而 System.Object 类中定义了一个 virtual 的 ToString 方法。这意味着,除非在派生类中重写 ToString 方法,否则调用任何对象的 ToString 方法时,都会返回该对象的类名加上其哈希码的字符串表示(这通常不是很有用)。

方法体(在您的例子中未给出):这是方法内部执行的代码,定义了当调用该方法时应该执行什么操作。对于 ToString 方法来说,通常的做法是返回一个能够描述对象状态的字符串。

相关推荐
蜡笔小新星11 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
攸攸太上25 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
Death20028 分钟前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
speop36 分钟前
【笔记】I/O总结王道强化视频笔记
笔记·音视频
Ljubim.te1 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
Death2001 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
yufei-coder1 小时前
C#基础语法
开发语言·c#·.net
yngsqq1 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
zengy52 小时前
Effective C++中文版学习记录(三)
数据结构·c++·学习·stl
cyt涛2 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok