#JavaScript (ES6), 94 bytes Not particularly short, but fun. Adding parentheses all over the place... <!-- language: lang-js --> s=>([e,o]=s.split` `,[...o].map(x=>e=e.split(x).join((a+=')')+x+(b+='(')),a=b=''),eval(b+e+a)) ###Test cases <!-- begin snippet: js hide: true console: true babel: false --> <!-- language: lang-js --> let f = s=>([e,o]=s.split` `,[...o].map(x=>e=e.split(x).join((a+=')')+x+(b+='(')),a=b=''),eval(b+e+a)) console.log(f("6.3*7.8 +-*/")) // 49.14 console.log(f("2.2*3.3+9.9/8.8-1.1 */+-")) // 7.285 console.log(f("2.2*3.3+9.9/8.8-1.1 +*/-")) // 2.2 console.log(f("10/2+5-1 +-/*")) // 1.6666 console.log(f("2147480/90+10*5 +/-*")) // 107374 console.log(f("3*55-5/8/4+1 -/+*")) // 7.6875 <!-- end snippet --> ###Historical note A similar method was used in early FORTRAN compilers. Here is a [link from archive.org](https://archive.org/stream/bitsavers_computersA_13990695/196212#page/n9/mode/2up) to a relevant article written by [Donald E. Knuth](https://en.wikipedia.org/wiki/Donald_Knuth) in a 1962 book called _Computers and automation_. ###Examples Let's consider the expression `2.2*3.3+9.9/8.8-1.1`. With operator precedence `*/+-`, it will expand to: ((((2.2)*(3.3)))+(((9.9))/((8.8))))-((((1.1)))) With operator precedence `+*/-`, it will now expand to: ((((2.2))*((3.3)+(9.9)))/(((8.8))))-((((1.1)))) Removing all redundant parentheses, we get: ((2.2*3.3)+(9.9/8.8))-1.1 = 7.285 and: ((2.2*(3.3+9.9))/8.8)-1.1 = 2.2