首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >添加双倍,而不是求和

添加双倍,而不是求和
EN

Stack Overflow用户
提问于 2019-02-25 00:18:48
回答 2查看 77关注 0票数 2

我正在做一个计算器,每当我的计算器加起来一个数字,它就把它们连在一起。

这方面的一个例子是3+5,它给了我35。我把数字转换成双倍,它仍然给了我35。这是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
Console.Write("Enter a Number: ");
double num1 = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter a Operator: ");
string op = Console.ReadLine();

Console.Write("Enter a Number: ");
double num2 = Convert.ToDouble(Console.ReadLine());

if (op == "+")
{
    Console.WriteLine(num1 + " plus " + num2 + " is " + num1 + num2);
}

Console.ReadLine();

谢谢你看我的帖子祝你今天愉快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-25 00:25:35

因为使用+在表达式中包含字符串,并且由于这些字符串参数在表达式中的出现顺序,所以C#编译器将+操作符视为字符串连接。

更详细地说:+被解释为字符串连接,因为表达式是从左到右计算的。第一个评估术语是num1 + " plus "。由于涉及一个字符串,所以将第一个+作为字符串连接的运算符处理。在计算到字符串的第一个术语时,第二个和后面的第二个+参数也被视为字符串连接,因为每个(部分)项的左侧总是被求值为字符串。

修复代码的一种“廉价”方法是使用parantheses帮助编译器区分算术运算符和字符串连接运算符:

代码语言:javascript
代码运行次数:0
运行
复制
Console.WriteLine(num1 + " plus " + num2 + " is " + ( num1 + num2 ) );

可以通过使用字符串内插(注意字符串前面的$符号)来实现更安全和更易读的输出写入方式,这可以方便地消除+操作符的混淆:

代码语言:javascript
代码运行次数:0
运行
复制
Console.WriteLine($"{num1} plus {num2} is {num1 + num2}");

(感谢@AlexeiLevenkov指出后者)

票数 3
EN

Stack Overflow用户

发布于 2019-02-25 00:45:48

其他的答案是足够的,并解释这个问题,尽管您可能希望使用串内插double.TryParse来验证输入并对失败提供反馈。

串内插

$特殊字符将字符串文字标识为内插字符串。内插字符串是可能包含内插表达式的字符串文字。当内插字符串被解析为结果字符串时,带有内插表达式的项将被表达式结果的字符串表示所替换。此特性可在C# 6和更高版本的语言中使用。

Double.TryParse法

将数字的字符串表示形式转换为等效的双精度浮点数.返回值指示转换是否成功。

示例

代码语言:javascript
代码运行次数:0
运行
复制
// valid operators
var ops = new[] { "+", "-", "/", "*" };

double num1;
Console.Write("Enter a Number: ");
while (!double.TryParse(Console.ReadLine(), out num1))
   Console.Write("Invalid number, try again");

string op;
Console.Write($"Enter operator (\"+\", \"-\", \"/\", \"*\"): ");
while (!ops.Contains(op = Console.ReadLine()))
   Console.Write("Invalid operator, try again");

double num2;
Console.Write("Enter a Number: ");
while (!double.TryParse(Console.ReadLine(), out num2))
   Console.Write("Invalid number, try again");

// local function to do stuff
double ApplyOperator()
{
   switch (op)
   {
      case "+": return num1 + num2;
      case "-": return num1 - num2;
      case "/": return num1 / num2;
      case "*": return num1 * num2;
      default: throw new InvalidOperationException();
   }
}

// an interpolated string
Console.WriteLine($"{num1} {op} {num2} = {ApplyOperator()}");

Console.ReadLine();

输出

代码语言:javascript
代码运行次数:0
运行
复制
Enter a Number: 1
Enter operator ("+", "-", "/", "*"): +
Enter a Number: 2
1 + 2 = 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54857924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档