Mám niekoľko výpočtov, ktoré majú ťažkosti kvôli problémom s plávajúcou matematikou v js. Snažím sa to opraviť vynásobením všetkých častí rovnice 1000 a potom rozdelením výsledku o 1000.
var a = 16924.83,
b = 16835.61;
var c = a-b; //outputs 89.22000000000116
var d = (1000*a-1000*b)/1000; //outputs 89.22 and seems to be working correct
Je v poriadku urobiť opravu problému s plávajúcou matematikou týmto spôsobom?
Čítal som Je matematika s plávajúcou desatinnou čiarkou zlomená?
odpovede:
1 pre odpoveď č. 1Po vynásobení by ste mali zaokrúhliť:
var d = (Math.round(1000*a)-Math.round(1000*b))/1000;
Len vynásobenie nemusí vyriešiť problém. Pri priradení
var a = 16924.83;
môže to vnútorne reprezentovať ako niečo podobné 16924.8300001
, takže keď násobíte 1000
dostanete 16924830.001
, Musíte sa zaobchádzať, aby ste sa zbavili tejto frakcie.