[问题] c# double运算后转int,输出值错误

楼主: christin023 (christine)   2021-07-29 01:16:17
初学c#,如下方代码片段,遇到使double转换int,运算后的值错误的问题(如图,图中
为分3次执行,分别输入52、51、50的结果),遇到的问题为,当我输入52,运算结果应
为114.64024,但结果却为114.64023999999999,自行尝试排解发现只要输入51-54的值都
会有如图中的状况发生,麻烦各位前辈提点,非常谢谢
static void Main(string[] args)
{
const double pd = 2.20462d;
Write("please input kg:");
int weight = int.Parse(ReadLine());
WriteLine($"{weight}kg = {weight * pd}pd");
作者: J002 (阿里山 我来了XD~)   2021-07-29 01:54:00
不考虑用decimal?
作者: ecniv (艾克尼夫)   2021-07-29 10:54:00
浮点数运算产生的问题,1是像1F讲的换数值类型,2是输出时指定数值格式。另外你的程式看不出有转换int的步骤,标题、内文、程式对不上...
楼主: christin023 (christine)   2021-07-29 11:54:00
谢谢一楼和二楼前辈指点,您的意思是因为资料型态转换出现精度不一的情况吗?另外我文中指的转换,是在练习过程中,看到书中写c#运算资料中若有不同型别的资料,会做资料型别的转换,还是我对这部分有理解错误呢?
作者: ssccg (23)   2021-07-29 12:05:00
你文中只有int转double(weight * pd时weight自动转double)没有double转int啊然后问题跟转换没有关系,你用52.0d * pd也会是一样结果单纯是浮点数的小数部分本来就不是精确数值,你可以想成原本2.20462d就不是2.20462,是2 + 一个很接近0.20462的小数所以最后结果不是114.64024也是很正常的,而且精度非固定会受有几个数字位数影响如果需要在十进制上精确,用decimal,不需要但是不想没事冒出一堆9就用Math.Round
楼主: christin023 (christine)   2021-07-29 14:05:00
有理解了,非常感谢
作者: Sisyphus (荒诞人)   2021-07-31 04:59:00
我有遇过一些bug是使用prase decimal需要加上NumberStyl
楼主: christin023 (christine)   2021-08-01 22:45:00
我这边有试过decimal,输出结果确实是我想要的~

Links booklink

Contact Us: admin [ a t ] ucptt.com