我有一个int和一个double,但是一旦我尝试从double中减去整数,就会抛出以下错误:
输入字符串的格式不正确。
现在让我们看一下代码:
int x = 1
我在这里做错了什么?我查看了这个Example,这基本上是相同的:int y = 2
和int this = x-y;
然后是issue['fields']['subtasks'][0]['summary']
如果你知道这个问题,请告诉我。
答案 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
如果失败,它将跳过减法而不是像解析或转换那样失败。你还想要列表或计数的总和吗?