du hast hier immer noch einen Preis auf Zehntel-Cent angegeben. Und da wunderst du dich, dass du in der Summe drei Stellen[*] nach dem Komma erhältst?
Aber weder hat 21.951 3 Stellen nach dem Komma, noch 21.95 2 Stellen. Beide lassen sich als double nicht darstellen. Deswegen sollte man bei sowas immer über toFixed gehen, bei Geld vielleicht sogar nur über 2 ganze Zahlen.