【问题标题】:How to ensure a precison on float using entity framework 6.x and a float column如何使用实体框架 6.x 和浮点列确保浮点精度
【发布时间】:2015-03-11 16:31:16
【问题描述】:

我试图理解为什么似乎无法准确设置浮点/双精度值的精度。

但是 .NET 允许我在此类值上使用 Math.Round,检查器会准确显示我舍入和/或输入的内容。

每当我尝试将这样的值保存回表时,我都会得到一个包含 86,609001159668 而不是 86,609 的语句

现在输入的值似乎可以正确到达表格。

我可以更改代码中的任何内容以实现此目标,但不能更改列类型本身。

有什么想法吗?

谢谢,

克里斯

【问题讨论】:

  • Rounding double values in C# 的可能重复项
  • 你是怎么知道生成的语句包含86.609001159668的?值不是作为 DbParameter 传递的吗?

标签: c# sql-server entity-framework


【解决方案1】:

.NET 浮点数不是十进制精确的。唯一精确的十进制 BCL 十进制类型是 decimalfloatdouble 是二进制“十进制”,因此无法在其中精确表示 86.609。使用Math.Round 只是使值足够接近86.609,它在作为ToString 的一部分发生的舍入过程中被打印出来。

因此,如果您想要精确的小数点小数,请在 .NET 中使用 decimal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2010-12-26
    相关资源
    最近更新 更多