- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个正则表达式和一个 JavaScript 函数,将用户刚刚输入的内容四舍五入到最多 2 位小数,用户可以输入任何数字和点,例如1, 2.3490, 23 并且当用户点击远离该字段时它应该更改为 1.00, 2.35, 23.00。到目前为止,我已经想到了这个:
这是我的正则表达式:
var pPrice =/^\d*\.\d*$/;
我的 JavaScript 函数:
// Function to validate price
function validateProductPrice(){
var priceRound = document.getElementById("productprice").value;
var priceHack = Math.round(priceRound*100)/100;
if (document.myForm.priceHack.value.trim().search(pPrice) == -1) {
alert("WRONG INPUT FOR PRICE!");
document.getElementById("priceERROR").style.display = "none";
} else {
document.getElementById("priceERROR").innerHTML = "CORRECT.";
document.getElementById("priceERROR").style.display = "block";
}
}
我的这个字段的 html:
<div>
<input type="text" class="productprice" placeholder="Price" name="productprice" onblur="return validateProductPrice() ">
<span id="priceERROR"></span>
<p class="price-help">Price e.g. if $1 please enter 1.00.</p>
</div>
我遇到了一些麻烦,因为它实际上不起作用而且我不知道为什么!
感谢大家的帮助!
编辑
我通过修复我在以下答案中得到的正则表达式并意识到我的输入没有 ID 来修复它,所以我调用了一个空值,现在我的代码是:
我的正则表达式是:
var pPrice =/^((?:\d+(?:\.\d*)?)|(?:\.\d+))$/
我的 JavaScript 是:
function validateProductPrice(){
var priceRound = document.getElementById("productprice").value;
var priceHack = Math.round(priceRound*100)/100;
if (document.myForm.productprice.value.trim().search(pPrice) == -1) {
alert("WRONG INPUT FOR PRICE!");
document.getElementById("priceERROR").style.display = "none";
} else {
document.getElementById("productprice").value = priceHack;
document.getElementById("priceERROR").innerHTML = "CORRECT.";
document.getElementById("priceERROR").style.display = "block";
}
我的 html 是:
<div>
<input id="productprice" type="text" class="productprice" placeholder="Price" name="productprice" onblur="return validateProductPrice()" >
<span id="priceERROR"></span>
<p class="price-help">Price e.g. if $1 please enter 1.00.</p>
</div>
现在它还会覆盖用户输入的任何内容,如果他输入 2.336678,则只显示 2.34,这正是我要找的!
谢谢大家帮我解决这个问题!希望我的编辑也能帮助人们!!
最佳答案
让我们从您的 RegEx 开始。您所拥有的将匹配具有任意小数位数的小数,但也可以匹配其他内容。
^((?:\d+(?:\.\d*)?)|(?:\.\d+))$
首先我们声明,如果只有一个没有小数位的整数,就可以了。但是,我们也允许使用简写形式 .8
来表示 0.8
。然后我们匹配所有小数位并捕获数字。 Here是对 RegEx 的测试。
我怀疑您想将更新后的值写入输入字段,但您从未这样做过。为此,我更新了代码,并在每次用户输入内容时进行更新,以提供更好的反馈。
var input = document.getElementById("price"),
priceRegex = /^((?:\d+(?:\.\d*)?)|(?:\.\d+))$/,
lastGood = "";
input.onkeyup = function(e) {
if (input.value === ".") {
lastGood = ".";
}
else if (priceRegex.test(price)) {
var price = parseFloat(input.value);
console.log("good");
var newPrice = "" + (Math.round(price * 100) / 100) + (input.value.indexOf(".") === input.value.length -1 ? "." : "");
input.value = newPrice;
lastGood = newPrice;
} else {
console.log("bad");
input.value = lastGood;
}
}
每当用户输入一个字符时,上面的函数就会被调用。首先它检查用户是否刚刚输入了 .
,这是一个特殊情况,因为它不是一个有效的数字,但可能是一个的开头。如果文本与上面解释的正则表达式匹配。如果是,则执行舍入并将其设置为新值。如果它与 RegEx 不匹配,则说明用户操作有误,我们将输入字段重置为我们认为正确的最后一个值(最后一个与 RegEx 匹配的值)。
查看实际效果 here .
关于javascript - 使用 JavaScript 舍入表单中的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556105/
我在 ASP.NET MVC 中有一个发票页面。 我正在计算 GST。 在 javascript 中这是结果。 165.45 * 0.1 = 16.544999999999998 在 C# 中我得到
在 JavaScript 中,我想将其减少到小数点后 5 位。不过,我不能简单地四舍五入并得到 0.03085,我需要进一步查看数字并将所有数字向上舍入,以便得到 0.03086。 输入:0.0308
有人可以解释为什么 R 这样做吗?在整数值上舍入最大值和最小值似乎非常有缺陷。 summary(1:1283932) Min. 1st Qu. Median Mean 3rd Qu.
所以基本上我正在做一个物理实验,在我的表格中,我希望我的数据四舍五入到与误差相同的精度,四舍五入为 1 sig fig。 例如,如果我有以下内容: angle signif(c(1.111,2.22
考虑以下 C# 代码... double x = Math.Round(72.6d, 2, MidpointRounding.ToZero); double y = Math.Round(82.6d,
我正在学习 BigDecimal,我希望它检索我输入的确切数字,以下代码正在处理该数字,我不知道为什么 public static BigDecimal parseFromNumberString(S
double y1 = 0; double y2 = 0; double i = 0.025; double n = 2; double h1 = 2000; double h2 = 4000
所以在下面的一组代码中,出于某种原因我得到了完全错误的答案...... import java.util.*; import java.io.*; import java.lang.*; import
在 Python 中,我想将两个数字相除,如果答案不是整数,我希望将数字四舍五入为上面的数字。 例如 100/30 不是给 33.3 而是给 4。谁能建议如何做到这一点?谢谢。 最佳答案 您可以使用
我需要对一个 float 进行四舍五入。例如 4.00011 。内置函数 round() 总是在数字 > .5 时向上舍入,在 = 0 val *= 10 ** precision r
我的代码: // Convert SATOSHIS to BITCOIN static double SATOSHI2BTC(const uint64_t& value) {
我想让我的 tableView 看起来像这样: 我有问题。只有在我点击单元格后,我的右角才会变圆。当 View 出现时,它看起来像这样: 点击后像这样: 这是我的代码: extension UITab
这个问题在这里已经有了答案: Precision String Format Specifier In Swift (31 个答案) 关闭 8 年前。 除了覆盖当前转换为字符串的方法之外,是否有一种
>>> a = 0.3135 >>> print("%.3f" % a) 0.314 >>> a = 0.3125 >>> print("%.3f" % a) 0.312 >>> 我期待 0.313
我有自动将输入字段加在一起的 javascript 函数,但是添加像 1.35 + 1.35 + 1.35 这样的数字会得到 4.050000000000001 的输出,这只是一个例子。如何将总数四舍
这可能是 x86 FPU 专家的问题: 我正在尝试编写一个生成范围 [min,max] 内的随机浮点值的函数。问题是我的生成器算法(浮点 Mersenne Twister,如果你好奇的话)只返回 [1
我一定错过了一些明显的东西。 select CEILING(85/30) = 2 85/30 = 2.83333 我希望该值为 3。 CEILING 函数不应该为我取整吗? 最佳答案 尝试 SELEC
我有一个关于 eclipse rcp 中的 ctabfolders 的问题。我创建了一个 e4 RCP 应用程序,其中包含一个包含堆栈部分容器的窗口,其中包含一个堆栈。该堆栈包含 1 个部分。在这一部
Closed. This question needs details or clarity。它当前不接受答案。
我读过其他一些帖子,它们似乎对其他人有用,但当我尝试它们时,它们不起作用。我刚刚开始学习Java编程,我似乎不明白如何四舍五入。 我试过了 answer = input * input; answer
我是一名优秀的程序员,十分优秀!