将浮点数转换为十进制,错误的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将浮点数转换为十进制,错误的值相关的知识,希望对你有一定的参考价值。
我有一个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
也是错误。
如果我只是将float
转换为double
:
float number = 10071072872302f;
var convertNumber = Convert.ToDouble(number);
我得到了值:10071073357824
,它是错误。
我真的很困惑。我公司的数据库设计为decimal
数据类型。我需要根据预先配置的公式以编程方式计算数据值,我需要使用返回浮点数据类型的NCalc
库。不幸的是,我无法将float
转换为十进制`。
有人能帮助我解决这一僵局吗?
答案
我有一个浮点数:10071072872302。
[很遗憾,为时已晚,float
不能完全表示10071072872302。因此,最接近的机器编号是:10071073357824。
例如参见:FloatConverter
您必须努力获得另一个表示形式,而不是float
(string
,decimal
或其他bigint库),才能获得此数字。
请注意,double
应该实际上是可以的。在任何情况下都存储精确值。另请参见常见问题解答:double number = 10071072872302
另一答案
问题是您的原始号码已无法用float
精确表示:
float number = 10071072872302f;
Console.WriteLine(number);
输出:1,007107E+13
;
您有7个以上的有效数字,不能用float
表示,因此您的原始值已经错误。
尝试获取原始值为decimal
。
以上是关于将浮点数转换为十进制,错误的值的主要内容,如果未能解决你的问题,请参考以下文章