浮点数转换成Int值的问题。

double a = 1.019;

int a =(int)( a * 1000);

int b = Convert.ToInt32(a*1000);

----------------------------------------------------------------

a = 1018;

b = 1019;

请问为什么会有区别。


动漫人物
浏览 1688回答 2
2回答

慕雪6442864

补充下:1 (int)是一种类型转换;当我们从int类型到long,float,double,decimal类型,可以使用隐式转换,但是当我们从long类型到int类型就需要使用显式转换,否则会产生编译错误。 2 int.Parse()是一种内容转换;表示将数字内容的字符串转为int类型。   如果字符串为空,则抛出ArgumentNullException异常;   如果字符串内容不是数字,则抛出FormatException异常;   如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常; 3 int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。   最后一个参数为输出值,如果转换失败,输出值为 0 4 Convert.ToInt32()是一种内容转换;但它不限于将字符串转为int类型,还可以是其它类型的参数; 比较:   Convert.ToInt32 参数为 null 时,返回 0; int.Parse 参数为 null 时,抛出异常。    Convert.ToInt32 参数为 "" 时,抛出异常;  int.Parse 参数为 "" 时,抛出异常。   Convert.ToInt32 可以转换的类型较多; int.Parse 只能转换数字类型的字符串。测试代码如下:#region double             i             double a = 1.019;             int b = (int)(a * testvar);             int c = Convert.ToInt32(a * testvar);             int d = int.Parse((a * testvar).ToString());             int f = 0;//也可以不赋值,出错时为默认为0                      bool result = int.TryParse((a * testvar).ToString(), out f);             Console.WriteLine(b.ToString());             Console.WriteLine(c.ToString());             Console.WriteLine(d.ToString());             Console.WriteLine(f.ToString());             Console.ReadKey();             #endregion当testvar为1000时,运行结果: 1018101910191019当testvar为100时,运行结果:int.Parse出错:输入字符串的格式不正确。修改代码为: #region double                         double a = 1.019;             int b = (int)(a * testvar);             int c = Convert.ToInt32(a * testvar);             int f = 0;//也可以不赋值,出错时为默认为0             bool result = int.TryParse((a * testvar).ToString(), out f);             Console.WriteLine(b.ToString());             Console.WriteLine(c.ToString());             Console.WriteLine(f.ToString());             Console.ReadKey();             #endregion运行结果为: 1011020推荐使用int.TryParse
打开App,查看更多内容
随时随地看视频慕课网APP