-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
小数点以下が整数以外で割り切れるとき(例えば、結果が丁度 2.5% なるとき。2%など完全に整数になる場合を除く) 、小数点以下の表示が7桁未満となる場合がある。
time-flies/public/js/script.js の function calcDecimals() の以下のコードは、$scope.ratio が 0.025 となる場合、a[0] が "2", a[1] は "5" となり、従って a[1].slice(0,7) も "5" となってしまう。
var a = (($scope.ratio * 100) + '').split('.');
if (a.length < 2) {
$scope.intRatio = a[0];
$scope.decRatio = '0000000';
} else {
$scope.intRatio = a[0];
$scope.decRatio = a[1].slice(0,7);
}
■検証
function chk(ratio) {
var a = ((ratio * 100) + '').split('.');
if (a.length < 2) {
return '0000000';
} else {
return a[1].slice(0,7);
}
}
chk(0.02) // 整数部で割り切れるケース
"0000000"
chk(0.025) // 不具合を生じるケース
"5"
chk(0.2345678901) // 末尾の0が正しく表示されているケース
"4567890"
■修正案
たとえば以下のような関数を作る方法などがあります。
function getDecimalPartString(value, scale) {
var s = Math.pow(10,scale)
var d = Math.round((value % 1) * s)
return (s + d).toString().substr(-scale)
}
■修正案の検証
getDecimalPartString(0.02 * 100, 7)
"0000000"
getDecimalPartString(0.025 * 100, 7)
"5000000"
getDecimalPartString(0.2345678901 * 100, 7)
"4567890"
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels