gpt4 book ai didi

c# - DataTable 计算值对于 Int32 类型来说太大或太小

转载 作者:太空狗 更新时间:2023-10-29 19:42:33 26 4
gpt4 key购买 nike

我最近发现了一种使用数据表对象的计算方法在 C# 中计算表达式的方法。这是一段代码:

    string expression = "330200000*450000";
var loDataTable = new DataTable();
var loDataColumn = new DataColumn("Eval", typeof(double), expression);
loDataTable.Columns.Add(loDataColumn);
loDataTable.Rows.Add(0);
MessageBox.Show(((double)(loDataTable.Rows[0]["Eval"])).ToString());

如果你输入一个像“300*2”这样的简单表达式,这将起作用,但是返回一个大数字的表达式将不起作用,我得到消息:

"Value is either too large or too small for Type 'Int32'."

我试图强制类型加倍,但出于某种原因,错误仍然指向有关 Int32 类型的内容,我不确定它来自哪里。

对此有一点了解吗?

最佳答案

将“.0”附加到方程中的值:

string expression = "330200000.0*450000.0";

如果像您所说的那样,用户按原样输入方程式(即没有“.0”),那么您可能不得不进行一些模糊不清的字符串操作才能实现此目的。我想到了以下内容,尽管我确信它可以做得更好:

string expression = "330200000*450000"; // or whatever your user has entered
expression = Regex.Replace(
expression,
@"\d+(\.\d+)?",
m => {
var x = m.ToString();
return x.Contains(".") ? x : string.Format("{0}.0", x);
}
);
var loDataTable = new DataTable();
var computedValue = loDataTable.Compute(expression, string.Empty);

正则表达式试图说明您的用户是否已经在他们的等式中的任何数字的末尾加上小数。

关于c# - DataTable 计算值对于 Int32 类型来说太大或太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com