Хотя так, ибо возврат из второго в первые единицы тоже нужно учесть.
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
var side = $('.side').on('input keyup', function() {
var a = this.value = this.value.replace(/[^\d,.]/,'').replace(/,/,'.'),
b = parseFloat(side.not(this).val()) || '',
u = +unit.filter(':checked').val();
$('#area').text(parseFloat(a) && b ? (a * b).toFixed(u)+ ' ' + ['мм²',,'м²'][u] : '')
}), unit = $('[name="unit"]').change(function() {
var u = +this.value;
side.val(function() {
if(parseFloat(this.value)) return u ? this.value / 1000 : this.value * 1000
}).trigger('keyup')
});
});
</script>
</head>
<body>
<div>
<h4>Прямоугольник</h4>
<label><input type="radio" name="unit" value="2" checked="" /> метры</label>
<label><input type="radio" name="unit" value="0" /> миллиметры</label>
<p>Длина прямоугольника: <input class="side" /></p>
<p>Ширина прямоугольника: <input class="side" /></p>
<div>Площадь прямоугольника: <span id="area"></span></div>
</div>
</body>
</html>