またjavascriptの浮動小数点の話ですが。
単純な小数同士の加算だけでも正しくない値になっちゃうんですね。
たとえば、
0.01+0.05
は0.060000000000000005
になっちゃう。
なので、もういっそのこと文字列で計算しよう。そうしよう。
ということでとりあえず加算だけ書きました。
function Float(){}
Float.add = function(a, b){
var aa = (a + "").split("."), ab = (b + "").split(".")
la = aa.length, lb = ab.length;
if(la == 1 && lb == 1){
return a + b;
}
if(la==1) aa.push("0");
if(lb==1) ab.push("0");
var d = Math.max(aa[1].length, ab[1].length);
while(aa[1].length < d) aa[1] += "0";
while(ab[1].length < d) ab[1] += "0";
var ac = [], i, u = 0;
for(i = d - 1; 0 <= i; i--){
var n = (aa[1].substr(i, 1) - 0) + (ab[1].substr(i, 1) - 0) + u;
u = 0;
if(9 < n){
n -= 10;
u = 1;
}
ac.push(n);
}
var c = ((aa[0] - 0) + (ab[0] - 0) + u) + "." + ac.reverse().join("");
return c - 0;
}
テストコードは無し。
最近ぜんぜん書いてなかったので、減算、乗算、除算については別のエントリにして水増ししますね…!
あ、よく考えたら符号のこと意識してなかったですね、これ><;