【问题标题】:is this normal in .NET 6 [duplicate]这在.NET 6中是否正常[重复]
【发布时间】:2022-01-02 11:27:16
【问题描述】:

我觉得这是一个错误,是吗?

decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);

结果是

【问题讨论】:

  • 这是所有.net版本的默认行为,整数除法:30 / 9 == 3; 30 % 9 == 3(这里%代表余数),如果你想要十进制,写成30m / 9m,如果是double - 20.0 / 9.0

标签: c# .net .net-core


【解决方案1】:

这正常吗,是的。这是一个错误吗,不是。

您正在对30 / 9(即3)进行整数数学运算,然后分配给decimal,然后由它进行转换。与第二行相同。

试试这个:

decimal s = 30m / 9m;
double w = 20.0 / 9.0;
Console.WriteLine(s);
Console.WriteLine(w);

这给了:

3.3333333333333333333333333333
2.2222222222222223

您需要在表达式中使用正确的类型声明常量。为decimal 添加一个m 后缀。并为double 提供小数位或带有d 的后缀。

【讨论】:

  • Console.WriteLine(s.ToString("N2")); // 3.33
  • Console.WriteLine(w.ToString("N4")); // 2.2222
  • @Gezgalee - 为什么?
  • 我很高兴与您这样的专业人士交谈。我写评论的目的只是向用户展示可以通过这种方式过滤输出。我无意冒昧,如果我让你不高兴,我向你道歉。祝你身体健康,成功。 @Enigmativity
  • @Gezgalee - 没问题 - 我只是不明白你为什么要尝试建议格式化值。我不认为这有助于以任何方式使情况更清晰。
猜你喜欢
  • 1970-01-01
  • 2022-07-12
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多