jQuery需求改造:输入值小于0.05时返回1/2
解决方法
问题出在你用toFixed(1)把小于0.05的数值转成了0.0,后续的分数转换逻辑会把这个值当成整数0处理,导致没有返回分数部分。要实现“所有小于0.05的输入值返回1/2”的需求,我们可以在处理前先判断输入值的大小,直接返回指定结果,再走原来的逻辑。
这里是修改后的代码:
修改后的JavaScript代码
function simpler(whole, x, y) { if (x == 0) { return whole; } else if (x == 1 && y == 10) { return whole + '<sup>' + 1 + '</sup>/<sub>' + 10 + '</sub>' } else if (x == 2 && y == 10) { return whole + '<sup>' + 1 + '</sup>/<sub>' + 5 + '</sub>' } else if (x == 3 && y == 10) { return whole + '<sup>' + 3 + '</sup>/<sub>' + 10 + '</sub>' } else if (x == 4 && y == 10) { return whole + '<sup>' + 2 + '</sup>/<sub>' + 5 + '</sub>' } else if (x == 5 && y == 10) { return whole + '<sup>' + 1 + '</sup>/<sub>' + 2 + '</sub>' } else if (x == 6 && y == 10) { return whole + '<sup>' + 3 + '</sup>/<sub>' + 5 + '</sub>' } else if (x == 7 && y == 10) { return whole + '<sup>' + 7 + '</sup>/<sub>' + 10 + '</sub>' } else if (x == 8 && y == 10) { return whole + '<sup>' + 4 + '</sup>/<sub>' + 5 + '</sub>' } else if (x == 9 && y == 10) { return whole + '<sup>' + 9 + '</sup>/<sub>' + 10 + '</sub>' } else { return whole + '<sup>' + x + '</sup>/<sub>' + y + '</sub>'; } } function Fraction() {} Fraction.prototype.convert = function(x, improper) { improper = improper || false; var abs = Math.abs(x); this.sign = x / abs; x = abs; var stack = 0; this.whole = !improper ? Math.floor(x) : 0; var fractional = !improper ? x - this.whole : abs; function recurs(x) { stack++; var intgr = Math.floor(x); var dec = (x - intgr); if (dec < 0.0019 || stack > 20) return [intgr, 1]; var num = recurs(1 / dec); return [intgr * num[0] + num[1], num[0]] } var t = recurs(fractional); this.numerator = t[0]; this.denominator = t[1]; } Fraction.prototype.toString = function() { var l = this.sign.toString().length; var sign = l === 2 ? '-' : ''; var whole = this.whole !== 0 ? this.sign * this.whole + ' ' : sign; return simpler(whole, this.numerator, this.denominator); } function f() { var text = $('#text').val(); var value = parseFloat(text); // 新增判断:如果数值小于0.05,直接返回1/2的格式 if (value < 0.05) { $('#result').html('<sup>1</sup>/<sub>2</sub>'); return; } var roundUp = 0.4; var digit = value.toFixed(1); var frac = new Fraction() frac.convert(digit, false) $('#result').html(frac.toString()); } $('#text').on('change', function() { f(); }); f();
HTML代码(无需修改)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" id="text" value="0.04" /> <div id="result"></div>
关键修改点:
- 在
f()函数中,先把输入值转换成浮点数value = parseFloat(text),直接判断value < 0.05 - 如果满足条件,直接给
#result设置<sup>1</sup>/<sub>2</sub>,并提前返回,跳过后续的分数转换逻辑 - 其他逻辑保持不变,这样既满足了你的需求,又保留原有代码的功能
内容的提问来源于stack exchange,提问作者Ashonko
相关产品推荐
相关产品推荐

