数组按80%与20%拆分遇异常:长度7时训练集尺寸为0的原因排查
问题根源:整数除法导致的计算错误
这绝对不是控制台显示错误,是你的代码里整数除法的逻辑问题!
十有八九是你在计算80%比例的时候,用了整数之间的除法操作——在很多编程语言(比如Python 2、Java、C++)里,两个整数相除会直接截断小数部分,只保留整数结果。举个例子:如果你的代码是类似下面这样的:
// 错误示例(Java) int arrayLength = 7; double trainingSize = arrayLength * 80 / 100; // 80/100是整数除法,结果为0,最终trainingSize=0.0 int testingSet = arrayLength - (int)trainingSize; // 7-0=7
或者Python 2里的写法:
# 错误示例(Python 2) array_length = 7 training_size = array_length * 80 / 100 # 80/100在Python2中是整数除法,结果0,最终training_size=0 testing_set = array_length - training_size # 7-0=7
这里的核心问题是:80 / 100被当作整数运算处理,结果直接变成0,再乘以数组长度7,自然得到0.0,剩下的测试集长度就成了7.0。
解决办法
你只需要确保计算比例时是浮点数运算,有几种常见的修正方式:
1. 直接用浮点数比例计算
把80%写成0.8这个浮点数,这样运算时会自动触发浮点计算:
# Python 3/2通用写法 array_length = 7 training_size = int(array_length * 0.8) # 7*0.8=5.6,转int后得到5 testing_set = array_length - training_size # 7-5=2
Java里的写法:
int arrayLength = 7; int trainingSize = (int) (arrayLength * 0.8); // 得到5 int testingSet = arrayLength - trainingSize; // 得到2
2. 先将整数转为浮点数再做除法
如果习惯用百分比的整数形式计算,可以先把其中一个数转成浮点数,避免整数截断:
training_size = int(array_length * (80.0 / 100))
3. 避免浮点精度问题的整数运算(可选)
如果你担心浮点数精度误差(比如某些长度下array_length*0.8的结果会有微小偏差),可以用整数运算实现四舍五入的80%计算:
training_size = (array_length * 80 + 50) // 100 # 加50是为了四舍五入,7*80=560+50=610//100=6
这种方式适合需要严格按比例取整且避免浮点误差的场景。
总之,检查你的代码里计算比例的部分,确保没有触发整数除法——这才是导致trainingSize变成0.0的真正原因,不是显示问题哦!
内容的提问来源于stack exchange,提问作者user9686239
相关产品推荐
相关产品推荐

