C#中double类型的Total与Tax相加时被转为字符串是什么原因
问题原因
C# 中+运算符遵循从左到右的运算顺序,且当字符串和其他类型做+运算时,会自动将其他类型隐式转换为字符串执行拼接操作。
你写的Console.WriteLine("Taxes: " + Total + Tax);执行逻辑如下:
- 第一步执行
"Taxes: " + Total:字符串和double类型相加,Total被隐式转为字符串,拼接得到新的字符串 - 第二步执行上一步得到的字符串
+ Tax:同样触发隐式转换,将Tax也转为字符串拼接,最终结果就是两个数值的字符串拼接效果,而非数值相加。
解决方法
- 方法1:给数值运算部分加括号,提升运算优先级,让数值先执行加法再拼接字符串
Console.WriteLine("Taxes: " + (Total + Tax));
- 方法2:使用字符串格式化语法,避免
+运算符的歧义
占位符写法:
Console.WriteLine("Taxes: {0}", Total + Tax);
字符串插值写法(C# 6及以上版本支持,更简洁):
Console.WriteLine($"Taxes: {Total + Tax}");
额外建议
涉及金额计算的场景不推荐使用double类型,double是二进制浮点类型,存在精度丢失风险,建议改用专门用于高精度数值/货币计算的decimal类型。
内容的提问来源于stack exchange,提问作者user10422085
相关产品推荐
相关产品推荐

