2017-12-18 293 views
0

我必须将对象转换为int。我的对象值类似于1.34535 我需要的是第一部分是(1)。将对象转换为int而不舍入

我尝试了以下方法: - Convert.ToInt32(myObj.Value),它将数字四舍五入。如果它是1.78,我知道了(2)这是错误的。我只需要第一部分的整数。

  • int.TryParse(myObj.Value.toString(), out outValue) 我得到了它0所有值!

  • int.Parse(myObj.Value.toString())引发异常,即格式不正确。

+0

如果什么值是13.4535,你仍然需要只是“1”的一部分或“13”? –

+1

该对象的源类型是什么? –

+6

什么是*对象?将在自然类型的输入中调用'Math.Floor',然后*转换为int:work? –

回答

1

如果myObj.Value盒装double,那么你必须投两次:到拆箱double,然后以截断成int

int result = (int)((double)(myObj.Value)): 

在一般情况下,请尝试Convert;这个想法是一样的:先还原一部开拓创新double,然后获取所需int

int result = (int) (Convert.ToDouble(myObj.Value)); 

编辑:在执行上面的我读过没有四舍五入请求作为截断,即小数部分应被忽略

2.4 -> 2 
-2.4 -> -2 

如果不同是正常现象,如

2.4 -> 2 
-2.4 -> -3 

可以添加Math.Floor例如,

int result = (int) (Math.Floor(Convert.ToDouble(myObj.Value))); 
+0

我认为,该解决方案不适用于负数。 (int)((double)( - 2.4))将为-2。 – lucky

+0

@Rainman:好的,这个问题并没有说明*负数*应该做什么。我建议*截断*:'2.42 - > 2','-2.4 - > -2'(小数部分*忽略)。如果它不是所需的行为('-2.4'应该放在'-3'中)'Math.Floor'可以被添加:'(int)(Math.Floor(Convert.ToDouble(myObj.Value)));' –

+0

在我看来,OP希望少一个双数。无论如何,OP应该做出决定。 – lucky

1

它首先转换为double;

var doubleValue = double.Parse(myObj.Value.ToString()); 
//It could be better to use double.TryParse 
int myInt = (int)Math.Floor(doubleValue); 
+1

它会围绕少一个。 Math.Floor(-2.4)是-3。 – lucky

+0

这个答案是不正确的,它不适用于负数 – Alander

+0

“它不适用于负数”这是什么意思?如果你想将数字舍入到少一个,使用“Floor”,如果你想采取第一部分只使用“截断”。这取决于要求。 – lucky

0

很容易,不要忘了将它包装在trycatch

int i = (int)Math.Truncate(double.Parse(myObj.ToString())); 

Math.Truncate只需切断逗号后的数字即可:

4.434成为4

-43.65445成为-43

0

或许,这也是一个解决方案:

var integer = int.Parse(myObject.Value.ToString().Split('.').First());