【问题标题】:c# - How to deal with decimalc# - 如何处理小数
【发布时间】:2017-02-21 09:10:47
【问题描述】:

我有一个 numericUpDown 并将属性的小数位设置为 3,所以它变成了 0.000

这里是代码

Decimal inputGrossWeight = numGrossWeight.Value;

if (inputGrossWeight = 0.000)
{
    MessageBox.Show("Gross Weight must be filled!");
}
else 
{
   Data newData = new Data();
   newData.grossWeight = inputGrossWeight;
}

注意:

  • numGrossWeight 是 numericUpDown 的名称

  • grossWeight 是我数据库中的列名

我将它存储到数据类型为浮点数的数据库中

所以当用户输入 2.365 时,它也会存储到数据库 2.365 中。

我尝试了很多方法,但它给了我错误:

无法将类型“十进制”隐式转换为“双精度”。显式 存在转换(您是否缺少演员表?)

double类型的文字不能隐式转换为类型 '十进制';使用“M”后缀来创建这种类型的文字

我的代码有什么问题?

【问题讨论】:

  • 第一个问题:当你想要== 时,你正在使用=。第二个问题:您正在使用 0.000 这是一个 double 文字;你想要 0.000m 所以它是一个 decimal 文字,正如第二个编译器错误告诉你的那样。 (不清楚是哪一行导致了第一个错误...)
  • 错误信息告诉你究竟出了什么问题
  • 错误清楚地说明了该怎么做,不是吗? “存在显式转换(您是否缺少演员表?)”
  • 第三个问题,如果数据类型为浮点数,则期望 2.365 作为十进制数将准确在数据库中存储为 2.365。
  • 当我重新检查我的实体模型时,我才意识到,grossWeight 的签名类型为 double,但在我的数据库中,grossWeight 列的签名数据类型为 float。

标签: c# database winforms numericupdown


【解决方案1】:

您正在尝试在 if 语句中进行分配。

不如试试这个

if (inputGrossWeight == 0m)

正如 Jon Skeet 在他的评论中提到的那样,通过添加 m,您可以确保您使用的是 decimal 文字,从而将苹果与苹果进行比较。

【讨论】:

  • 加上“m”就可以了,但我还是不明白,以前的“m”是什么?
  • 添加 m 使其成为十进制文字,正如 Jon Skeet 所提到的。当你没有它时,它是一个双重文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多