【问题标题】:var is casted to int even when result should be decimal [duplicate]即使结果应该是十进制,var 也被转换为 int [重复]
【发布时间】:2017-01-06 18:17:12
【问题描述】:

我知道这是一个非常基本的问题,但请解释一下为什么会这样。

var number = 7 / 2; // number is 3
decimal number = 7 /2; // still number is 3

为什么不是 3.5?为什么总是强制转换为int?因为数字都是整数?这在您将其中一个数字转换为十进制时有效。

【问题讨论】:

  • 你是两个整数相除,结果总是一个整数。
  • 分母为 2(改为 2.0),因此编译器会截断结果的小数部分。
  • 表达式 7 / 2(类型 int / int)将计算为整数值 3,因为它使用整数除法。
  • 如果您希望将数字文字视为十进制,请在您要除的数字之一之后使用后缀 m(正如 Rene 和 Manfred 指出的那样)

标签: c#


【解决方案1】:

文字72 都被编译器解释为int。所以除法是一个整数除法,结果是int 的值3

使用var 关键字,编译器从表达式中推断出正确的类型,导致第一行中的numberint 类型。

在第二行中,您将number 明确声明为十进制,因此7 / 2 返回的int 被强制转换为decimal


如果您希望结果为decimal,则应使用以m 结尾的正确文字:

var number = 7/2m;

【讨论】:

    【解决方案2】:

    因为7/3(int)7/(int)3。 如果您想获得decimal,请使用7m/2m

    【讨论】:

    • 7/2m就够了
    • @GiladGreen 是的,这就足够了。
    • @GiladGreen 或7m/2
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 2023-03-08
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2019-11-11
    • 2014-04-05
    相关资源
    最近更新 更多