所以,我在一个方框中有一个数字,它可以是正数也可以是负数。根据该选择,我的算法会发生变化。
假设我在框中得到207,并且它通过我的代码块运行,我希望从数据库获得207的每个可能的十进制变体,但我不妨看看其他的。所以我所做的是获得大于207但是小于一个数字的数字,它看起来像这样:
emit
这给了我来自后端的207.50,207.99,207.13等。
我稍后需要这个用于SQL语句,但这是重要的部分:
const emitter = new Emitter()
emitter.on("greet", function () {
// ... etc
})
当解析sbuilder(字符串构建器)时,它看起来像这样:
String DecimalValue = FilterUSD.Text.ToString().Trim();
Double Deci = Convert.ToDouble(DecimalValue);
Double init = Deci;
Double init2 = init + 1;
这符合我的预期,我得到给定数字的每个十进制数,包括该数字。
我需要帮助的是负面变化。我不确定我做错了什么,但是代码的并置不起作用,当我尝试通过SQL命令过滤它时,它将不返回任何行。
这是完整的代码:
sbuilder.Append(" Amount_USD").Append(" >= ").Append("@init AND Amount_USD < @init2 ");
负基础代码的SQL输出:
Select * FROM Table WHERE Amount_USD >= @init AND Amount_USD < @init2
答案 0 :(得分:3)
如果我们考虑:
if(Deci < 0)
{
//Negative
Double init = Deci;
Double init2 = init - 1;
sbuilder.Append(" Amount_USD").Append(" <= ").Append("@init AND Amount_USD > @init2 ");
}
此处init
和init2
的值无关 - 它们不会在任何地方使用,它们肯定不是参数中使用的值。相反,找到添加参数的位置,并查看您添加那里的值。我希望你使用“+1”版本,这将给出一个不可能的范围测试。
这里的一个好方法是声明变量在之外的if
测试,在中填充,然后使用这些值;例如:
double init, init2;
if(Deci < 0) {
init = Deci;
init2 = init - 1;
sqlBuilder.Append(" Amount_USD <= @init AND Amount_USD > @init2 ");
} else {
init = Deci;
init2 = init + 1;
sqlBuilder.Append(" Amount_USD >= @init AND Amount_USD < @init2 ");
}
cmd.Parameters.AddWithValue("@init", init);
cmd.Parameters.AddWithValue("@init2", init2);
这将强迫您在两个代码路径中为本地人(init
,init2
)分配一个有意义的值。
附注:您可能需要decimal
而不是double
;钱通常不是浮点数。