{"record":{"id":"715372194735aad6","repo":"apache/seatunnel","slug":"cannot-convert-to-double","errorCode":null,"errorMessage":"Cannot convert to double: ","messagePattern":"Cannot convert to double: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/data/RowConverter.java","lineNumber":315,"sourceCode":"    }\n\n    protected float convertFloat(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).floatValue();\n        } else if (value instanceof String) {\n            return Float.parseFloat((String) value);\n        }\n        throw new IllegalArgumentException(\n                \"Cannot convert to float: \" + value.getClass().getName());\n    }\n\n    protected double convertDouble(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).doubleValue();\n        } else if (value instanceof String) {\n            return Double.parseDouble((String) value);\n        }\n        throw new IllegalArgumentException(\n                \"Cannot convert to double: \" + value.getClass().getName());\n    }\n\n    protected BigDecimal convertDecimal(Object value, Types.DecimalType type) {\n        BigDecimal bigDecimal;\n        if (value instanceof BigDecimal) {\n            bigDecimal = (BigDecimal) value;\n        } else if (value instanceof Number) {\n            Number num = (Number) value;\n            Double dbl = num.doubleValue();\n            if (dbl.equals(Math.floor(dbl))) {\n                bigDecimal = BigDecimal.valueOf(num.longValue());\n            } else {\n                bigDecimal = BigDecimal.valueOf(dbl);\n            }\n        } else if (value instanceof String) {\n            bigDecimal = new BigDecimal((String) value);\n        } else {","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/data/RowConverter.java#L297-L333","documentation":"Thrown by RowConverter.convertDouble when an Iceberg field value being converted to a double is neither a Number nor a parseable String; the message names the value's Java class, identifying the incompatible source type.","triggerScenarios":"convertValue targeting an Iceberg DoubleType field receives a value that is neither Number nor String (e.g. Boolean, byte[], LocalDate).","commonSituations":"Date/time objects in DOUBLE columns, booleans from parsers, misaligned schema between source and Iceberg table.","solutions":["Normalize upstream values to numeric or numeric-string form.","Pre-cast with a transform: CAST(col AS DOUBLE).","Change the Iceberg column type to match the actual data type.","Catch IllegalArgumentException for error routing."],"exampleFix":"// before\nrow.setField(0, true); // double field\n// after\nrow.setField(0, 1.0d);","handlingStrategy":"type-guard","validationCode":"if (!(v instanceof Number) && !(v instanceof String)) { throw new IllegalArgumentException(\"double field expects Number/String, got \" + v.getClass()); }","typeGuard":"Double safeToDouble(Object v) { if (v instanceof Number) return ((Number) v).doubleValue(); if (v instanceof String) return Double.valueOf((String) v); return null; }","tryCatchPattern":"try { value = convertDouble(raw); } catch (IllegalArgumentException e) { log.warn(\"Bad double value: {}\", e.getMessage()); }","preventionTips":["Normalize values to numeric types before the sink","Use CAST to DOUBLE in transforms","Validate schema alignment between source and Iceberg table"],"tags":["iceberg","type-conversion","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}