【问题标题】:weird error "operator '*' cannot be applied to operands of type 'double' and 'decimal'"奇怪的错误“运算符'*'不能应用于'double'和'decimal'类型的操作数”
【发布时间】:2014-09-27 10:40:21
【问题描述】:

好的,我有这个代码:

decimal jewels = numericUpDown1.Value;
int price = 0.35 / 100 * jewels;
MessageBox.Show(price.ToString());

但由于一些奇怪的原因,我收到了这个错误:`

运算符'*'不能应用于'double'和'decimal'类型的操作数`。

我尝试过使用所有不同的类型,例如 float、double 和 int,但它们都不起作用!

有什么想法吗?

【问题讨论】:

  • 您不能直接将decimaldouble 相乘。 (0.35/100double)。先将double 转换为decimal,反之亦然。
  • 通过使它们都具有相同的类型来简化它 - 然后将 Concert 恢复为 int。 int i = Convert.ToInt32(0.35m * 100m)

标签: c#


【解决方案1】:

您不能将decimal 值与double 值相乘。如果您使用 decimal 文字值,则乘法可以正常工作:

0.35M / 100M * jewels

要将其分配给int 变量,您必须将结果转换为int

int price = (int)(0.35M / 100M * jewels);

您可能希望先对 decimal 值进行四舍五入,因为只是强制转换会截断该值:

int price = (int)Math.Round(0.35M / 100M * jewels);

【讨论】:

  • 我建议在 Round 上传入 MidpointRounding 参数。 MidpointRounding.AwayFromZero 很可能会按照您想要的方式进行。见msdn.microsoft.com/en-us/library/…
  • @Trevor:由于四舍五入的值是价格,银行家四舍五入似乎更合适。这是Round 方法的默认设置。
  • 为什么投反对票?如果你不解释你认为错的地方是什么,它就无法改进答案。
【解决方案2】:

这会起作用的,

decimal price = Convert.ToDecimal(0.35 / 100) * jewels;

如果您希望价格为 int:

int price = Convert.ToInt32(Convert.ToDecimal(0.35 / 100) * jewels);

而且.. 我认为珠宝不需要是十进制的,因为它的值来自始终为 int 的数字上下控制?

【讨论】:

    【解决方案3】:

    您需要专门从十进制转换为其他数字格式,例如双精度。所以试试:

    int price = 0.35 / 100 * Convert.ToDouble(jewels);
    

    或者:

    int price = 0.35 / 100 * (double)jewels;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2023-04-07
      • 2019-08-23
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多