Skip to content

「終了」「残り」のパーセンテージの小数点以下表示が7桁未満となる #9

@tsuda-a

Description

@tsuda-a

 小数点以下が整数以外で割り切れるとき(例えば、結果が丁度 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"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions