c# - 将浮点数转换为十进制,错误值
问题描述
我有一个float
数字:10071072872302
我需要将其转换为decimal
.
float number = 10071072872302f;
var convertNumber = Convert.ToDecimal(number);
我得到了价值:10071070000000
这是错误的。
如果我double
先将其转换为,然后将其转换为decimal
:
float number = 10071072872302f;
var convertNumber = Convert.ToDecimal(Convert.ToDouble(number));
我得到了价值:10071073357824
这也是Wrong。
如果我只是转换float
为double
:
float number = 10071072872302f;
var convertNumber = Convert.ToDouble(number);
我得到了价值:10071073357824
这是错误的。
我真的很困惑。我公司的数据库是用decimal
数据类型设计的。我需要根据预先配置的公式以编程方式计算数据的值,我需要使用NCalc
返回浮点数据类型的库。不幸的是,我无法转换float
为十进制`。
谁能帮我解决这个僵局?
编辑 我想澄清为什么我需要将浮点数转换为十进制。
要获得一个值,我需要计算如下表达式:ISA16+ISA8+ISNULL(MAX((ABS(BSMS10)-ABS(BSMS10_)),0),0)
取数据库中的数据替换表达式后,我有这样一个表达式:10071072872302+872302+MAX((ABS(-072872302)-ABS(2302)),0)
为了计算这个表达式的值,我使用NCalc
库
private static object CalculateString(string formula)
{
var expression = new Expression(formula);
expression.EvaluateFunction += (name, args) =>
{
switch (name)
{
case "ABS":
args.Result = Math.Abs(Convert.ToDouble(args.Parameters[0].Evaluate()));
break;
case "MAX":
args.Result = Math.Max(Convert.ToDouble(args.Parameters[0].Evaluate()), Convert.ToDouble(args.Parameters[1].Evaluate()));
break;
}
};
var value = expression.Evaluate();
return value;
}
表达式有多种形式。但是,为了检查该值,我尝试检查一些10071072872302
var result = CalculateString("10071072872302");
我得到的结果是一个浮点值,所以我需要将其转换为十进制以匹配数据库中的数据类型。这就是我提出上述问题的原因。
解决方案
我有一个浮点数:10071072872302。
float number = 10071072872302f;
不幸的是,为时已晚,float
没有 10071072872302 的确切表示。所以最接近的最近机器号是:10071073357824。这就是实际存储在变量中的值。
参见例如:FloatConverter
您必须努力获得另一种表示形式,而不是float
(string
、decimal
或其他 bigint 库)来获得这个数字。
请注意,double
对于这个精确的数字(double number = 10071072872302
float
double
另请参阅此通用问答:浮点数学是否损坏?
推荐阅读
- python - Pandas 基于更高分辨率数据重新采样
- html - 具有可变高度的固定元素下方的静态元素
- ruby-on-rails-3.2 - 将 sidekiq 与 ActiveJob 一起使用会产生问题
- javascript - 当有人将光标移到html中的按钮上时如何创建弹出框?
- scala - scala DataFrame访问Array中的WrappedArray元素
- python-2.7 - 错误"AttributeError: 'product.pricelist' 对象没有属性 'get_product_pricelist'
- three.js - Oculus GO 浏览器全屏
- ruby-on-rails - 限制用户在模型中执行某些操作
- mysql - Rails 4:两个 has_many 模型的模型关系和索引
- python - 为什么 python 显示 datetime(2018,01,01,10,08,00) 的无效令牌?