【问题标题】:Is there a way to check for int easily? [closed]有没有办法轻松检查 int ? [关闭]
【发布时间】:2016-02-27 17:13:29
【问题描述】:

是否有一个简单的表达式可以放入 if 语句中以检查值是否为 int? 像这样,检查x 是否是一个int:

x = 1

if (Diceroll() = 1)
{
    x = x * 0.75
}
if (Diceroll() = 2)
{
    x = x * 1.25
}
if (Diceroll() = 3)
{
    x = x * 1
}


if (x != int)
{
    consol.writeline("X is not an int")
}
if (x = int)
{
    consol.writeline("X is an int")
}

【问题讨论】:

  • 那么x 的类型是什么?请给minimal reproducible example...我们目前无法确定您想要实现的目标。
  • 您的代码不会按原样编译。
  • @ja72 我认为你不需要编译这段代码来看看它应该做什么。
  • 我指的是consolwriteline,它们在语法上无缘无故地不正确。
  • 是的,但这对 OP 有何帮助?如果他们的标题更符合他们的要求,那将会更有帮助。

标签: c#


【解决方案1】:

你可以这样写:

double x;

// your code here

if (x != Math.Floor(x))
   Console.WriteLine("X is not an int")
else
   Console.WriteLine("X is an int")

另请参阅此答案:https://stackoverflow.com/a/1650120/3901618 关于比较浮点值(根据 CodeCaster 的评论)。

【讨论】:

  • 从我们掌握的少量信息来看,这可能是 OP 真正想要的。只需要注意舍入错误。使用一点 epsilon 值进行模糊比较可能就足够了,但我个人会尽可能避免使用浮点数。
  • 或者只是 x % 1 == 0,如果双打是他的用例
【解决方案2】:

您可能需要详细说明您的问题。首先,x-object的类型是什么?

第二,你要严格测试它的数据类型是不是int? 这很容易:

 object p = ....;
 bool is_int = p is int;

或者你想检查额外的东西?比如……

  • ... 如果 p 是 Int64 或 Uint32 等,上述操作将失败,或者 基本上任何其他非严格 int (Int32) 的整数类型
  • 对于双 p = 1,上述方法也会失败。
  • ... 它还会 字符串 p = "1" 失败

这些是您可能想或不想考虑的情况?如果是这样,他们需要额外的工作。

【讨论】:

  • is 仅适用于引用类型。
  • 嗯不这么认为? bool is_int1 = ((int)1) 是整数; bool is_int2 = ((double)2) 是整数;编译正常并按预期工作
  • 我一直将isas 一起使用,这绝对只适用于引用类型。
  • 是的,“as”只适用于 ref 类型。其他一切确实没有多大意义。例如int number = somevariable as int;如果 somevariable 不是 int,这应该返回什么?默认(int),所以 0?这与 int somevariable = 0 的情况无法区分。无论如何,这对于“is”关键字来说不是问题,因为它不会与此类问题发生冲突。
【解决方案3】:

您的问题有两种不同的解释,如果您要问“x”的值是否可以是整数,请使用。

int temp = 0;
string x = "numberofsomesort";
if (!int.TryParse(x,out temp))
{
    Console.Writeline("X is not an int");
}

或者如果你有一个对象并且你想检查它的类型,你可以使用。

object x;

if (!(x is int))
{
    Console.Writeline("X is not an int");
}

编辑:查看您的新代码,第一个建议是正确的,因为您正在检查“x”的值是否可以转换为整数。

【讨论】:

    【解决方案4】:

    您可以通过两种方式做到这一点:

    int aIntValue;
    if(int.TryParse(x, out aIntValue))
    

    如果 int.TryParse 返回 true,它会将值“x”转换为变量“aIntValue”。如果返回 false,则“x”不是数字。

    或者你可以这样做:

    if(!(x is int))
    

    【讨论】:

    • 和我的回答一样
    • 对不起,您在我之前发布了几秒钟,我没有看到。你不需要为了这个否定我。
    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多