【发布时间】:2016-12-20 05:47:49
【问题描述】:
我试图在两种情况下防止溢出,一种是将long与float相乘,另一种是将两个long相加。
喜欢:
public static long multiplyLong(long value, float multiplier)
{
if (value * multiplier > long.MaxValue)
{
Debug.Log("greater then max value");
return value = long.MaxValue;
}
else
{
Debug.Log("not greater then max value");
return (long) (value * multiplier);
}
}
public static long addLong(long value, long adder)
{
if(value + adder > long.MaxValue)
{
Debug.Log("greater then max value");
return value = long.MaxValue;
}
else
{
Debug.Log("not greater then max value");
return value + adder;
}
}
“multiplyLong”可以完美运行,而“addLong”则不能正常运行。使用 addLong 时,会出现溢出,它不会检测到溢出。我认为这很奇怪,因为代码看起来还可以。
有人可以帮我吗?
“检查”不是一个选项。
【问题讨论】:
-
如果您经常使用
long溢出。您可能应该使用不同的数据类型,例如float或decimal -
您能解释一下为什么
checked不适合您吗?因为它似乎正是为这种情况而设计的。
标签: c# unity3d overflow long-integer