如何使用JQ或者JS如何计算超公里数

提问,现在我想计算一个超公里数价格的插件,比如我设定超过10公里之后, 每超出1公里
就为超出公里数,那我如何自动计算出这个超出的一公里呢
下面例子
总路程15公里,现超出5公里
总路程8公里 (这是没超出公里数的情况)
总路程500米 (这是没超出公里数的情况)

这个问题写了几天 都没好方法实现 ,请问这个应该怎么实现

2个回答


<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.7.1/jquery.min.js"></script>
<div id="g1">max=10公里<br />
    <input type="text" class="dist" value="15公里" /><br />
    <input type="text" class="dist" value="8公里" /><br />
    <input type="text" class="dist" value="500米" /><br />
</div>
<div id="g2">max=800米<br />
    <input type="text" class="dist" value="15公里" /><br />
    <input type="text" class="dist" value="2000米" /><br />
    <input type="text" class="dist" value="500米" /><br />
</div>
<script>
    $.fn.getDist = function (max) {
        var km,re=/^(\d+)(公里|米)$/;
        if (!(km = re.exec(max))) { alert('max参数错误,格式为为“10公里或者10000米”'); throw 'max参数错误,格式为为“10公里或者10000米”' }
        if (km[2] == '米') km = parseFloat(km[1] / 1000);//传入的为米转为公里单位
        else km = parseFloat(km[1]);
        function getExceed() {
            var m = re.exec(this.value);
            if (m) {//符合“数字公里/米”格式执行计算
                if (m[2] == '米') m = parseFloat(m[1] / 1000);//传入的为米转为公里单位
                else m = parseFloat(m[1]);console.log(m,km)
                var span = $(this).next('span');
                if (span.length == 0) $(this).after(span = $('<span></span>'));
                span.html(m > km ? '<span>现超出' + (m - km) + '公里</span>' : '');
            }
        }
        return this.each(getExceed).change(getExceed);
    }
    $('#g1 input.dist').getDist('10公里');
    $('#g2 input.dist').getDist('800米');
</script>
q2617426
无感五 回复showbo: 谢谢解决了
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复风一: re=/^(\d+(\.\d+)?)(公里|米)$/;  正则改这个,允许输入小数位
接近 3 年之前 回复
q2617426
无感五 回复showbo: 大佬,可以在看看吗,在有小数点的情况下,还是不能统计
接近 3 年之前 回复
showbo
支付宝加好友偷能量挖 回复风一: Math.round进位。记得采纳:)。。。。   span.html(m > km ? '<span>现超出' + (m - km) + '公里</span>' : '');=====>span.html(m > km ? '<span>现超出' + Math.round(m - km) + '公里</span>' : '');
接近 3 年之前 回复
q2617426
无感五 在请问一下,如果里面有小数点的情况下怎么办呢 比如小数点为10.5公里 的情况下,可以统计为超出1公里吗
接近 3 年之前 回复

function calculateOverflowKM(inputKm,definedKm){
var overflowKm = inputKm-definedKm;
if(overflowKm<0.0){
return 0.0;
}
return overflowKm;
}

哈哈

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐