浮点数相除为什么没有小数了?

期望结果是3.6,但是实际上是3.0,请问是什么问题?

微信图片_20221005110524.png

您好我感觉是因为360是整形,100也是整形,两个整形的运算还是整形,所以(360/100)相当于3

所以打印出来是3.0

建议将第二行替换成 step=(360.0/100); 再试一试


您好,麻烦说一下你用的是我司哪款MCU,这边可以帮你测试一下


您好,首先你用的两个整型数相除;当整型除以整型时,得到的仍然是整型,只是直接去掉商的小数部分,然后只取整数部分,不考虑四舍五入的问题。故而360/100只会直接保存整数部分即3

其次,您用的是float单精度类型(表示带有小数的实数时有不连续和不精确的特点),是无法得到3.6这个数值的,如果您改成360.0/100,这样得到的数值会是3.59

3.6这样的数字使用float类型是没办法精确存储的, float所能表示的小数是跳跃的,这些小数也必须能写成2n次幂相加才可以,比如0.50.250.125…以及这些数字的和。

如果您想得到精确的数值,建议将step的类型改成double,将算式改成360.0/100即可。



只有登录才能回复,可以选择微信账号登录