将浮点数转换为十进制,错误的值

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

您必须努力获得另一个表示形式,而不是floatstringdecimal或其他bigint库),才能获得此数字。

请注意,double 应该实际上是可以的。在任何情况下都存储精确值。另请参见常见问题解答:double number = 10071072872302

另一答案

问题是您的原始号码已无法用float精确表示:

float number = 10071072872302f;
Console.WriteLine(number);

输出:1,007107E+13;

您有7个以上的有效数字,不能用float表示,因此您的原始值已经错误。

尝试获取原始值为decimal

以上是关于将浮点数转换为十进制,错误的值的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将浮点数作为十六进制转换为十进制

将浮点数与数组中的值进行比较时,“TypeError:只能将整数标量数组转换为标量索引”

C将浮点数转换为int

将浮点数转换为无符号短时的舍入问题

将浮点数转换为整数

将浮点数转换为美元和美分