从double中减去int会导致错误

时间:2018-04-19 16:09:04

标签: c# int double subtraction

我有一个int和一个double,但是一旦我尝试从double中减去整数,就会抛出以下错误:

  

输入字符串的格式不正确。

现在让我们看一下代码:

int x = 1

我在这里做错了什么?我查看了这个Example,这基本上是相同的:int y = 2int this = x-y;然后是issue['fields']['subtasks'][0]['summary']

如果你知道这个问题,请告诉我。

2 个答案:

答案 0 :(得分:4)

  

我在这里做错了什么?

很多。

if(otherFe != string.Empty || otherFe!= "") // This part works fine

那是荒谬的代码。 string.Empty"" 是相同的字符串

改为使用

if (!string.IsNullOrEmpty(otherFe))

继续前进:

totalafter =  TotalNoRegis - Convert.ToInt32(otherFe); // Here the error is thrown

您声称错误是减法,但事实并非如此。问题出在ToInt32。您正在传递一些其他字符串,而不是您正在显示的字符串。

我喜欢这样做的方法是制作一个扩展方法:

static public class Extensions 
{
    public static int? ParseAsInteger(this string s) {
        if (string.IsNullOrEmpty(s)) return null;
        int i;
        return int.TryParse(s, out i) ? (int?)i : (int?)null;
    }
    // Similarly write `ParseAsDouble` and so on.
}

现在您有一个可以使用的扩展程序:

double? totalAfter = TotalNoRegis - otherFe.ParseAsInteger();

(或ParseAsDouble,或其他。)

如果otherFe有效,则totalAfter有总数;如果不是,则为null

这里的教训是:将类型转换逻辑移动到您自己的方法中,您可以独立测试。然后,该方法的调用站点的逻辑变得更简单,更容易理解。

答案 1 :(得分:1)

你应该使用整数而不是double,特别是如果你没有理由使用double。因此,为了纠正,您可以简单地执行以下操作。

int total = values.Sum();
var other = "6000";

if(!string.IsNullOrEmpty(other))
     if(int.TryParse(other, out int subtractor))
          total -= subtractor;

如果你需要一个双倍,然后使用,但如果你不为什么打扰?此外,你从六千减去一千五百个项目,你的总数将总是负数或经常是负数。这是你想要的意图吗?

需要注意的是,TryParse如果失败,它将跳过减法而不是像解析或转换那样失败。你还想要列表或计数的总和吗?