C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别以及ToString()和Convert.ToString()的区别

在计算关于“钱”的各种占比时,我遇到了各种问题。

例如:

double a=1.4035;

Console.WriteLine($"0.##输出:{a.ToString("0.##")}");      ①
Console.WriteLine($"F2输出:{a.ToString("F2")}");      ②
Console.WriteLine($"0.00输出:{a.ToString("0.00")}");      ③

结果:①输出1.4    ②输出1.40    ③输出1.40。

卧*,见鬼了。怎么回事。后来查询后才知道ToString("0.##")并不是我们想的小数点后两位,而是  # 代表后面的不是零就被保留,如果是0就去掉。 例如ToString("0.##") 1.20的话结果是1.2。

比如有这种需求的:如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2530.可不可以刚好保留到最后一位不是0的位置。默认保留2位,如果真的有3位小数,就保留3位,有4位就保留4位。

可以这么干,默认有两位就是00 其它的如果大于两位就不是零就保留的话 可以下面这样写
double dd = 1.2530;
string ret = dd.ToString("0.00####");      

好这个大概就这样了。想知道更具体的可以去问一下百度,(#^.^#)。

一、一般用法说明

  ToString()是Object的扩展方法,所以都有ToString()方法;而Convert.ToString(param)(其中param参数的数据类型可以是各种基本数据类型,也可以是bool或object类对象。

二、ToString()和Convert.ToString()的区别

  一般情况下,这两种方法都可以通用,但是当返回的数据类型中有可能出现null值时如果调用ToString方法了,就会返回NullReferenceException,除非你要捕捉此异常再做处理,否则在这种情况下就应考虑使用Convert.ToString()方法了,因为Convert.ToString(null)不会抛出异常而是返回空字符串。
主要的区别就如上所示,由于ToString()是扩展方法,扩展自Object,所以转null报异常。而Convert.ToString()返回空字符串。

string str1 = "";

Console.WriteLine(Convert.ToString(str1) == null); //false

Console.WriteLine(Convert.ToString(str1) == "");  //true

string str2 = null;

Console.WriteLine(Convert.ToString(str2) == null); //true

Console.WriteLine(Convert.ToString(str2) == "");  //false

null转了之后还是null,""转了之后还是""。

从 object 到 string 大致有四种方式,包括显式转换和as关键词的使用:obj.ToString()、Convert.ToString()、(string)obj、obj as string。他们都能将 object 对象转换成 string 对象。

  前两个方法通常是由别的对象得到 string 对象,它们间的区别如前文所述主要表现在:

ToString() :如果 obj 为 null,调用 obj.ToString() 方法会导致 NullReferenceException 异常。

Convert.ToString():如果 obj 为 null,调用 Convert.ToString()会返回null

(string):用强制转换 (string)obj 要求 obj 的运行时类型必须是 string。如果不是,就会抛出异常。

as :用 as 方法则会相对平稳,当 obj 的运行时类型不是 string 时会返回 null 而不抛出异常。

  所以在通常在我们需要得到某个对象的 string 表达形式时,我们应该使用 ToString() 和 Convert.ToString(),这时候你就得根据情形选一个,假如你能保证你的对象不为 null,则两个差不多。如果有可能为 null,你就应该用 Convert.ToString(),如果你希望它为 null 的时候抛出异常,那么当然可以选择 ToString()。

  ToString()这个方法太方便了,以致于以为就它这一种方法, 一般都是转之前先判断是否为null。

(int)、int.Parse()、int.TryParse()和Convert.ToInt32(),那么这四种方法对被转换对象有什么限制,以及各自之间有什么区别呢?资料有很多,我就不再多说了,直接来点“干货”——总结

首先,在 C# 中,int 其实就是 System.Int32,即都是32位的。 
其次,(int) 和 Convert.ToInt32 是两个不同的概念,前者是类型转换,而后者则是内容转换,它们并不总是等效的。我们很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: 
string text = "1412"; 
int id = (int)text; 
因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要考虑精度问题。

(int)          类型转换

Convert.ToInt32()    内容转换(内容解释)

int.Parse()       转换String为int

int.TryParse()       尝试转换(int.TryParse(input, out i)如果转换失败,输出值为 0,如果转换成功,输出值为转换后的int值)

(1)Convert.ToInt32的参数比较多,Int.Parse只能转换string类型的.

(2)Parse就是把String转换成int,char,double....等,也就是*.Parse(string) 括号中的一定要是string.

(3)Convert可以提供多种类型的转换,也就搜索是Convert.*()括号中可以为很多种类型(包括string).

1)对于转换对象,Convert.ToInt32()可以为多种类型(例出数字类型外bool,DateTime等),int.TryParse()和int.Parse()只能是整型字符串类型(即各种整型ToString()之后的形式,不能为浮点型,否则int.Parse()就会出现输入的字符串格式不正确的错误,int.TryParse()也会返回false,输出参数为0),(int)只能是数字类型(例float,int,uint等);

2)对于空值NULL,从运行报错的角度讲,(int)强制转换和int.Parse()都不能接受NULL;Convert.ToInt32()其实是在转换前先做了一个判断,参数如果为NULL,则直接返回0,否则就调用int.Parse()进行转换,int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0;

3)针对于浮点型的取舍问题,浮点型只有Convert.ToInt32()和(int)能进行转换,但是也是进行取舍了的,Convert.ToInt32()采取的取舍是进行四舍五入,而(int)则是截取浮点型的整数部分,忽略小数部分,例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d还是返回1;

4)关于溢出,将大的数据类型转换为小的数据类型时Convert.ToInt32()和int.Parse()都会报溢出错误,值对于Int32太大或太小。而(int)不报错,但是返回值为-1。

我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,如果是整型字符串类型的,考虑用int.Parse()进行转换,如果不是这两种类型,再考虑用Convert.ToInt32()进行转换。

最后要感谢StatmoonWalle2014。他们的解释比我的更清楚,我把他们的“砖”搬我这点用用,

原文地址:https://www.cnblogs.com/bkyqtr/p/12612187.html

时间: 2024-08-10 15:12:10

C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别以及ToString()和Convert.ToString()的区别的相关文章

C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别

在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法:分别为(int).int.Parse().int.TryParse()和Convert.ToInt32(),那么这四种方法对被转换对象有什么限制,以及各自之间有什么区别呢?相信很多童鞋也不能完全说清楚. 下面从被转换对象说起,在我们实际开发项目的过程中,我们碰到需要被转换的类型大概有3大类,分别是空值(NULL).数字类型(包含float,double,int,long等)和字符串(

C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别 <转>

作者:Statmoon 出处:http://leolis.cnblogs.com/ 在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法:分别为(int).int.Parse().int.TryParse()和Convert.ToInt32(),那么这四种方法对被转换对象有什么限制,以及各自之间有什么区别呢?相信很多童鞋也不能完全说清楚. 下面从被转换对象说起,在我们实际开发项目的过程中,我们碰到需要被转换的类型大概有3大类,分别是空值

c#中的类型转换,int.parse("ab")为什么会出错

一.问题 在一个简单的闰年问题的判断中,输入框获取的字符串,我们希望输入数字字符串,将字符串转换为int整数进行判断.编写程序如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks

C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()

一.(int)变量名[强制类型转换]:  该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误. 该方式对于浮点数会做无条件舍去,失去精确度.当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错.最后切忌的一点,千万不要用来处理char类型

Convert、Parse、TryParse、(int) 区别

Convert.ToInt32.int.Parse(Int32.Parse).int.TryParse.(int) 四者都可以解释为将类型转换为 int,那它们的区别是什么呢? Convert.ToInt32 与 int.Parse 较为类似,实际上 Convert.ToInt32 内部调用了 int.Parse: Convert.ToInt32 参数为 null 时,返回 0: int.Parse 参数为 null 时,抛出异常. Convert.ToInt32 参数为 "" 时,抛

int.Parse()、int.TryParse()和Convert.ToInt32()的区别

1:int.Parse(一个参数)        此参数必须满足: 1 只能是字符串: 2 只能是 “整型” 字符串,即各种整型ToString()之后的形式,也不能为浮点型. 2:int.TryParse(参数a,参数b); 此方法可以看做是int.Parse()方法的升级,即做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0: 注意,参数a, 也必须是字符串或null即可 例如: int b; int.TryParse("54.1",out b); Respons

C# 中 int、Convert.ToInt32()、int.Parse()的区别

int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型); int.Parse(string sParameter)是个构造函数,参数类型只支持string类型; Convert.ToInt32()适合将Object类型转换为int型; Convert.ToInt32()和int.Parse()的细微差别: 对于空值(null)的处理不 同,Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则 会产生异常. https:

c#中convert.toInt32和int.parse()和强制类型转换的区别

string a="123"; int i=(string)a; 这是会出现错误因为:强制类型转换只能转换值类型不能转换引用类型 string属于引用类型    强制类型转换时如果值类型为小数则直接舍位  如: int i=(int)123.6  结果为:123 int.parse()里边的值只能是string类型,他也只能转换string里边的整数如: string a="123"    string a="123.4"就会出错  也不能转换值

Int.Parse()、Convert.toInt32()和(int)区别

通过网上的查询从而了解了Int.Parse().Convert.toInt32()和(int)区别. 一.定义上的差别 int类型表示一种整型,.NET Framework 类型为 System.Int32.而是用(int)表示显式强制类型转换,当从 int 类型到 long.float.double 或decimal 类型,称为隐式转换:当从从double 或decimal.float.long.int类型逐级转换时,称为显式强制类型转换.(对long 类型或是浮点型到int 类型的显式强制转