потому что порядок выполнения операторов
1. операция умножения с двумя операндами т.к. язык с динамической типизацией то операнды приводятся к одному типу.
т.е. после операции «result.toFixed(2)» привидения к строке результат выражения «result.toFixed(2)» снова приводится к числу для проведения операции умножения.
В JS для хранения типа Number используются только число с плавающей точкой т.е. точная арифметика в JS невозможна (без плясок с бубном)
поможет изменения порядка операций с использованием скобок
var result = Math.random();
alert( (100*result).toFixed(2) + " = " + result)