AnyLogic数据库类型设置及加工时长类型兼容问题咨询
解决AnyLogic中Excel整数转Double列表的类型不匹配问题
下面给你几个不用手动修改Excel列类型的可行方案:
方案1:加载数据时强制统一转换为Double类型
在读取Excel数据并赋值给产品的v_ProcessTime列表时,主动把每个列值转换为Double类型,不管原始值是整数还是小数。
假设你的Excel数据库表名为processTimes,对应工序列是op1、op2、op3,产品类的v_ProcessTime是List<Double>类型,代码可以这么写:
for (ProcessTimesRow row : processTimes) { Product newProduct = new Product(); List<Double> processTimesList = new ArrayList<>(); // 把每个列值转成Double,toString避免类型判断 processTimesList.add(Double.valueOf(row.getOp1().toString())); processTimesList.add(Double.valueOf(row.getOp2().toString())); processTimesList.add(Double.valueOf(row.getOp3().toString())); newProduct.v_ProcessTime = processTimesList; // 将产品添加到模型的集合中 allProducts.add(newProduct); }
这种方法能统一处理整数和小数,彻底规避类型不匹配的问题。
方案2:修改AnyLogic Excel数据库的列类型映射
不用动Excel文件本身,直接在AnyLogic的数据库配置里指定列类型为Double:
- 双击模型中的Excel数据库图标,打开配置窗口
- 切换到「Columns」标签页
- 找到对应工序时长的列,将「Type」从默认的
Auto或Integer改成Double - 保存配置后重新加载数据,AnyLogic会自动把Excel里的整数转成
9.0这样的Double值,直接存入List<Double>不会报错
这个方法最省事,不需要写额外代码,适合大多数场景。
方案3:调整自动生成的实体类字段类型
如果你的Excel数据库是通过AnyLogic自动生成实体类(比如ProcessTimesRow),检查实体类里对应工序列的字段类型:
- 打开自动生成的实体类文件(一般在模型的
database目录下) - 把原来的
Integer类型字段改成Double - 保存后重新生成数据库映射,这样读取数据时会直接按Double类型处理
内容的提问来源于stack exchange,提问作者user16171092
相关产品推荐
相关产品推荐

