获取数字的小数变化

时间:2017-07-24 08:19:42

标签: c# winforms tsql data-conversion negative-number

所以,我在一个方框中有一个数字,它可以是正数也可以是负数。根据该选择,我的算法会发生变化。

假设我在框中得到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 

1 个答案:

答案 0 :(得分:3)

如果我们考虑:

if(Deci < 0)
{
    //Negative
    Double init = Deci;
    Double init2 = init - 1;
    sbuilder.Append(" Amount_USD").Append(" <= ").Append("@init AND Amount_USD > @init2 ");
}

此处initinit2的值无关 - 它们不会在任何地方使用,它们肯定不是参数中使用的值。相反,找到添加参数的位置,并查看您添加那里的值。我希望你使用“+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);

这将强迫您在两个代码路径中为本地人(initinit2)分配一个有意义的值。

附注:您可能需要decimal而不是double;钱通常不是浮点数。