Use round() with two parameters, which only works for the data type numeric.
While being at it, your query can be simpler and faster:
SELECT region
     , round(sum(suminsured), 2) AS suminsured
     , round((sum(suminsured) * 100) / sum(sum(suminsured)) OVER (), 2) AS pct 
FROM  "Exposure_commune"
GROUP  BY 1;
You can use sum() as window function to get the total without additional subquery, which is cheaper. Related:
Multiplying first is typically cheaper and more exact (although that barely matters with numeric).
Data type is not numeric
For data types double precision of real
You can ...
- just cast to numericto use the same function.
- multiply by 100, cast to integerand divide by100.0.
- multiply by 100 and use the simple round()and devide by100.
The simple round() with just one parameter works for floating point types as well.
Demonstrating all three variants:
SELECT region
     , round(sum(suminsured), 2) AS suminsured
     , (sum(suminsured) * 100)::int / 100.0 AS suminsured2
     , round(sum(suminsured) * 100) / 100 AS suminsured3
     , round((sum(suminsured) * 100) / sum(sum(suminsured)) OVER (), 2) AS pct 
     , ((sum(suminsured) * 10000) / sum(sum(suminsured)) OVER ())::int / 100.0 AS pct2
     , round((sum(suminsured) * 10000) / sum(sum(suminsured)) OVER ()) / 100 AS pct3
FROM  "Exposure_commune"
GROUP  BY 1;
SQL Fiddle.