背景:在芬兰,学校的传统评分系统是基于数字和减号/加号。如果学生得到6+,则等于6.25,6-等于5.75。
我有以下代码:
function miinustin() {
var vanha = $('#summa').val();
var valiUusi = vanha.slice(0, -1);
var vikamerkki = vanha.slice(-1);
if (vikamerkki === "-") {
var uusi = valiUusi - 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "+") {
var uusi = valiUusi + 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "½") {
var uusi = valiUusi + 0.5;
$('#summa').val(uusi);
}
};
$('#summa').on("input", miinustin);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value="" id="summa">
&#13;
为什么6-
变为5.75
但6+
变为60.25
而6½
变为60.50
,如何解决此问题?我确实意识到else if
语句0.25
语句0.50
和{{1}}由于某种原因不被视为数值,但为什么?
答案 0 :(得分:2)
看起来值valiUusi
和vikamerkki
都是字符串,这意味着JavaScript会尝试连接0.25
或0.5
,而不是添加或减去它们。< / p>
解决方案是在使用parseInt之前将这些值转换为数字:
function miinustin() {
var vanha = $('#summa').val();
var valiUusi = parseInt(vanha.slice(0, -1), 10);
var vikamerkki = vanha.slice(-1);
if (vikamerkki === "-") {
var uusi = valiUusi - 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "+") {
var uusi = valiUusi + 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "½") {
var uusi = valiUusi + 0.5;
$('#summa').val(uusi);
}
};
$('#summa').on("input", miinustin);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value="" id="summa">
&#13;
答案 1 :(得分:2)
如果其中一个操作数是一个字符串,那么带有加号oparator的表达式的结果就是一个字符串。
另外,您需要将字符串(输入)转换为数字。一种简单的方法是将加号前置为unary plus以获取所有操作的数字。
var valiUusi = +vanha.slice(0, -1);
// ^ unary +
function miinustin() {
var vanha = $('#summa').val();
var valiUusi = +vanha.slice(0, -1);
var vikamerkki = vanha.slice(-1);
if (vikamerkki === "-") {
var uusi = valiUusi - 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "+") {
var uusi = valiUusi + 0.25;
$('#summa').val(uusi);
} else if (vikamerkki === "½") {
var uusi = valiUusi + 0.5;
$('#summa').val(uusi);
}
};
$('#summa').on("input", miinustin);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value="" id="summa">
答案 2 :(得分:0)
JavaScript是动态类型语言。
var vanha = $('#summa').val(); // Is a String
var valiUusi = vanha.slice(0, -1); // Is a String
在脚本执行期间根据需要自动转换数据类型
When you do var uusi = valiUusi + 0.25; //
valiUusi被视为字符串 - In expressions involving numeric and string values with the + operator, JavaScript converts numeric values to strings
因此该值变为 60.25
然而,在涉及其他而不是&#34; +&#34;的声明中运算符,JavaScript不会将数值转换为字符串
因此var uusi = valiUusi + 0.25;变成5.75
The correct way to approach is to use : parseInt or parseFloat()
进一步阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types
答案 3 :(得分:0)
感谢您指出我的代码无效的原因!
我发现(在知道谷歌的内容之后)这也有效:
var valiUusi = vanha.slice(0, -1);
valiUusi = Number(valiUusi);
现在,脚本按预期工作:按下每个时间-
,从文本字段中的值中扣除0.25
。 +
和½
也有效。