私は JavaScript に非常に慣れていません (私は Java のバックグラウンドを持っています)。少額のお金で財務計算をしようとしています。
これに対する私の最初の目的は次のとおりです。
<script type="text/javascript">
var normBase = ("[price]").replace("$", "");
var salesBase = ("[saleprice]").replace("$", "");
var base;
if (salesBase != 0) {
base = salesBase;
} else {
base = normBase;
}
var per5 = (base - (base * 0.05));
var per7 = (base - (base * 0.07));
var per10 = (base - (base * 0.10));
var per15 = (base - (base * 0.15));
document.write
(
'5% Off: $' + (Math.ceil(per5 * 100) / 100).toFixed(2) + '<br/>' +
'7% Off: $' + (Math.ceil(per7 * 100) / 100).toFixed(2) + '<br/>' +
'10% Off: $' + (Math.ceil(per10 * 100) / 100).toFixed(2) + '<br/>' +
'15% Off: $' + (Math.ceil(per15 * 100) / 100).toFixed(2) + '<br/>'
);
</script>
これは、常に切り上げられることを除けばうまくいきました ( Math.ceil
)。Math.floor
同じ問題があり、Math.round
フロートにも適していません。
Java では、フロートの使用を最初から完全に避けていたでしょうが、JavaScript では、同等のものがデフォルトで含まれているようには見えません。
問題は、言及されているすべてのライブラリが壊れているか、別の目的で使用されていることです。ライブラリはjsfromhell.com/classes/bignumber
必要なものに非常に近いですが、丸めと精度に奇妙な問題があります... Round Type を何に設定しても、それ自体が決定するようです。したがって、たとえば、精度が 2 の 3.7107 で、丸型ROUND_HALF_UP
が 3.71 であるべきところが、どういうわけか 3.72 になってしまいます。
@JasonSmith BigDecimal ライブラリ (Java の BigDecimal から機械加工されたポート) も試しましたが、実行するオプションがない node.js 用のようです。
バニラJavaScriptを使用してこれを達成するにはどうすればよいですか(そして信頼できる)、または維持されていて壊れていない、使用できる最新の(上記のものはすべて何年も前のものです)ライブラリがありますか?