在C#中将十进制转换为字符串时出现问题网
本文关键字:问题 字符串 十进制 转换 | 更新日期: 2023-09-27 17:59:11
在将Decimal转换为String时,我尝试了两种方法。
方法1:
string a = "100.00", b = "50.00";
string Total = (string)(Convert.ToDecimal(a) + Convert.ToDecimal(b));
它抛出错误,无法将Decimal转换为String。
方法2:
string Total = (Convert.ToDecimal(a) + Convert.ToDecimal(b)).ToString();
它不会出错,而且运行良好。
我想知道这两种转换方法之间的区别,以及当我使用方法1时为什么会出错?
第一种方法是尝试取一个小数(2个小数相加的结果)并将其强制转换为字符串。由于没有从十进制到字符串的(隐式或)显式转换,因此由于不匹配,它会抛出。
第二个方法取一个十进制,并对其调用ToString()方法-由于ToString是十进制类型的有效方法,因此这会调用一个普通的实例方法,并获得该调用的返回值,即字符串。
由于您已经在使用Convert调用,您可能会发现进行Convert更自然。ToString,将小数返回到字符串。
如果将"addtwodecimals"分隔到一个单独的局部var中,可能会更清楚,因为这在这里是通用的。
因此,(注释掉的)total1失败了,因为它试图进行强制转换,而我们没有可用的转换。后两者都很好,因为它们是返回字符串的方法调用。
string a = "100.00", b = "50.00";
decimal result = Convert.ToDecimal(a) + Convert.ToDecimal(b);
//string total1 = (string)result;
string total2 = result.ToString();
string total3 = Convert.ToString(result);
第一个代码尝试将十进制"类型强制转换"为字符串,其中第二个代码调用decimal上的ToString方法来获得decimal的字符串表示。从十进制到字符串的类型转换不起作用,除非十进制类型重载了类型转换运算符,而它没有重载,因此类型转换引发异常。
在这种情况下,类型转换就像要求CLR系统将十进制类型转换为字符串,CLR无法做到这一点,因为它找不到方法。调用ToString是要求十进制类型返回其字符串表示
Method1是一个强制转换,因此您试图将十进制变量中包含的数据作为字符串"读取"。。。你当然不能。例如,您可以将一个字节强制转换为int,因为它们都是数字。相反,对于十进制到字符串,您需要一个显式的转换过程。
这是因为在第一种方法中,您将字符串a和b转换为十进制,但当您只是将类型转换为字符串时,您需要将该十进制值转换为字符串,然后再将其分配给字符串变量。在第二种方法中,您实际上是使用ToString()
方法将十进制值转换为字符串,所以它不会出错。
这是表的链接,它说您不能像在第一种方法中那样将十进制转换为字符串:
显式数值转换表(C#参考)
第二个方法正在工作,因为您正在使用对象类的ToString()方法。
在第一种方法中,你基本上是在做吗
string a = (string)150m;
其中150是十进制。从十进制到字符串没有显式或隐式转换。编译器无法理解如何进行转换。
在第二种方法中,您调用
string a = 150m.ToString();
在这种情况下,您将调用Decimal
类实现的ToString
方法(以及所有其他类)。