如何不将双精度转换为整数 C#
本文关键字:整数 转换 双精度 何不 | 更新日期: 2023-09-27 18:35:44
好的,人们让我尝试清除最后一个 itme。我有一个对象 a,我想检查它的值是双精度、整数还是字符串。
例如: -如果对象 A = "12.3" 或 A = 12.3,它应该能够转换为 double 并在转换为 int 时抛出。如果对象 a = "12" 或 a = 12 或 a = 12.0,它应该能够在转换为 double 时转换为 int 和抛出。
如果对象 a="apple",它应该同时抛出 double 和 int。
希望这次我清楚了。但Timwi的解决方案实际上为我解决了这个问题。:-)
我认为你有一个双精度,如果它是一个整数,你想把它转换为 int,否则就会抛出。这是你想要的吗?
public static int ToInt32(double val)
{
if (val % 1 != 0)
throw new FormatException("The value is not an integer.");
return Convert.ToInt32(val);
}
我怀疑在您的示例中a
属于 object
类型,而实际代码有点像这样:
int myToInt(object a)
{
return Convert.ToInt32(a);
}
但是如果a
是整数,您希望抛出它。那么这个怎么样:
int myToInt(object a)
{
if (a is double)
throw new ArgumentException("a", "Must not be a double");
return Convert.ToInt32(a);
}
既然我们都完全猜测OP在这里想要什么,所以我再试一次。假设你想要一个当且仅当值被截断时抛出的方法,请尝试如下操作:
int MyToInt32(double value)
{
if (value != Math.Floor(value))
throw new ArgumentException("value", "The value must not have a fractional part");
return (int) value;
}
但这可能是一个相当糟糕的主意。
var a = 12.34;
int c = Int32.Parse(a.ToString(), NumberStyles.Integer,
CultureInfo.InvariantCulture);
如果数字的字符串表示形式不是整数,这将引发异常。它的文档在这里。
第一次转换.Int32(double) 不会截断采用整数部分和排除小数部分的值。 事实上,它返回舍入值。
值,舍入到最接近的 32 位有符号整数。如果值为 在两个整数之间的中间,返回偶数;那 是,4.5 转换为 4,5.5 转换为 6。
强制转换将截断该值,并将采用整数部分并丢弃小数部分。
对于您的问题
是否有一个自定义的 c# 方法,我可以通过它抛出格式 异常或其他东西,当我尝试将双精度转换为整数时。 ??
如果传递给它的值不是有效的双精度值,Convert.ToInt32
会引发异常。
var val = "12.54A";
int iVal = Convert.ToInt32(val);
而如果你尝试使用 int iVal = (int) val; 来转换它,会给你编译错误。
你能尝试使用数学吗?您可以尝试为双精度添加一些值,以确保它比 int 更大(或更小)。
然后尝试转换(这将返回错误)和相反的数学函数。
仍然不知道为什么要抛出错误...
双 -> int 将起作用,如果变量位于 int 边框之间
使用 is 怎么样
if( x is int )
{
// convert here
}
else
{
throw new Exception("Not an int");
}
使用演员表
var a = 12.34
int integer = (int)a;