JavaScript 100% with comments
\nfunction solution(S) {\n    S = S.slice(1, S.length - 1);\n    let arr = [];\n\n    // Separate in 2 parts. All possible ways (just put comma in all possible 
```\nfunction solution(S) {\n    S = S.slice(1, S.length - 1);\n    let arr = [];\n\n    // Separate in 2 parts. All possible ways (just put comma in all possible places).\n    for (let i = 1; i < S.length; i++) {\n        // get all possible (distinct) numbers that a string can be converted to. Do this for string1 and string2\n        let p1 = combos(S.slice(0, i));\n        let p2 = combos(S.slice(i));\n\n\n        if (p1.length && p2.length) {\n            for (let x1 of p1) {\n                for (let x2 of p2) {\n                    arr.push([x1, x2]);\n                }\n            }\n        }\n    }\n    return arr.map(e => `(${e[0]}, ${e[1]})`);\n}\n\n// get all possible (distinct) numbers that a string can be converted to.\nfunction combos(s) {\n    let set = new Set(); // Use set so that it keeps distinct values\n    if (String(Number(s)).length === s.length) set.add(Number(s));\n    if (s.length === 1) return [...set];\n\n    // Just put a dot in all possible places.\n    for (let i = 1; i < s.length; i++) {\n        let x = Number(s.slice(0, i) + \'.\' + s.slice(i));\n\n        // Don\'t add if some digits were lost during convert (e.g. 0012 --> 12)\n        if (String(x).length === (s.length + 1)) set.add(x);\n    }\n    return [...set];\n}\n```
[]