请仅使用JavaScript。
这是我第一次尝试自己编写JavaScript。我成功地操纵了朋友过去为我写过的代码,但是我从来没有从头开始编写自己的代码,也没有花时间尝试直到最近才理解语言本身。
我正在尝试制作一个基本的胸罩尺寸计算器,它从用户输入中获取数字(测量值),将它们引导到一个函数中并向用户返回(计算)胸罩尺寸。
由于我对这门语言很陌生,我现在只想写一个部分 - “乐队大小”
我有一个输入字段供用户输入我的“胸围测量”,我目前已设置为圆形。这按预期工作。见这里
<html>
<head>
<script type="text/javascript">
function calculate()
{
var underbust = document.getElementById("underBust").value;
if (underbust.length === 0)
{
alert("Please enter your underbust measurement in inches");
return;
}
document.getElementById("bandsize").innerHTML = Math.round(underbust);
}
</script>
</head>
<body>
<input type="number" id="underBust" /> inches<br>
<input type="submit" value="Submit" onclick="calculate()" /><br>
<b>underbust:</b> <div id="bandsize">bandsize will appear here</div><br>
</body>
</html>
但是,我不需要输入'underBust'来舍入到最接近的整数。我需要它来舍入到最接近的偶数整数,因为胸罩带尺寸只有整数。
例如,如果用户输入数字“31.25”,则代码当前将其舍入为“31”但我需要将其舍入为“32”
如果用户输入数字“30.25”,则代码会将其正确地舍入为“30”,因为在这种情况下,最接近的整数和最接近的整数偶数相同。但是,如果用户输入“30.5”,代码会将其四舍五入到“31”,但我仍然需要将其向下舍入到“30”
基本上,如果用户输入等于或大于奇数(29.00变为30,31.25变为32等),我需要将数字四舍五入。如果用户输入大于或等于偶数且小于下一个奇数(28,28.25,28.75等),我需要将其向下舍入(在前面的例子中,对于所有情况为28)。奇数是舍入的中间分隔,而不是任何数字的“.5”。
这可能吗?
答案 0 :(得分:33)
这应该这样做:
2 * Math.round(underbust / 2);
答案 1 :(得分:0)
如果您还想格式化,请以@Bergi的答案为基础
function roundToEven(value) {
return Number.isNaN(n)
? 0.0
: 2 * Math.round(value / 2);
}
/**
* Round-to-even with a fixed number of decimals (2 decimals = to cent/öre). Returns [ rounded value, formatted rounded value ].
* @param {*} n The number to round-to-even, with the given number of decimals
* @param {*} decimals The number of decimals in base10 to round the number at.
*/
function roundToEvenFixed(n, decimals = 2.0) {
if (Number.isNaN(n) || Number.isNaN(decimals)) {
return 0.0
}
const value = (Math.round((n * Math.pow(10, decimals)) / 2) * 2) / Math.pow(10, decimals),
formatted = value.toFixed(decimals);
return [ value, formatted ]
}
当您想要无偏四舍五入时非常有用。用法:
console.log(`Amount: ${roundToEvenFixed(i.quantity * i.unitPrice.amount)[1]} kr`)
答案 2 :(得分:-1)
我是一个绝对的业余爱好者,但我犯了错误的方式
2 * parseInt(value / 2)
但它完全符合我的要求 - Math.round将其舍入为0.5 ParseInt在0
做到了