[英]javascript - find range value between two floats
我有一个像这样的字符串:
(999.08) - (1025.67)
我需要能够找到这两个值之间的范围作为浮点,即使它们是负值,所以(-999.08) - ( - 1025.67)也在范围内。
假设我需要使用正则表达式并在某种数组中加入两个?
通过查看其他人的答案,我无法判断他们中是否有任何一个正确处理负数。 如果有人需要,我会把它扔进戒指。
function parse(str) {
// init to NaN
var result = Number.NaN;
// capture numbers in groups
var pat = new RegExp(/\((-?\d+.?\d*)\)\s*-\s*\((-?\d+.?\d*)\)/);
var match = str.match(pat);
if (match) {
// match[0] is whole match which is not useful
var a = new Number(match[1]); // 1st group is 1st number
var b = new Number(match[2]); // 2nd group is 2nd number
result = Math.abs(a - b);
}
return result;
}
演示: http : //jsbin.com/oseba4/edit
您可以使用.split将字符串拆分为“ - ”,使用replace删除括号,然后使用parseFloat这两个数字。 之后,检查两个数字中的最高数字,然后减去该范围。
有几种方法: 这是一种方式:有点远
var myString = "(999.08) - (1025.67)"
var myFloatValues = mystring.split("-");
myFloatValues[0] = myFloatValues[0].replace("(", "").replace(")", "");
myFloatValues[1] = myFloatValues[1].replace("(", "").replace(")", "");
myFloatValues[0] = parseFloat(myFloatValues[0])
myFloatValues[1] = parseFloat(myFloatValues[1])
这是使用正则表达式:
var myString = "(999.08) - (1025.67)"
var myFloatValues = (myString.replace(/\(*|\)*|\s*/g, "")).split("-");
myFloatValues[0] = parseFloat(myFloatValues[0])
myFloatValues[1] = parseFloat(myFloatValues[1])
注意:我一直在使用的有用网站
此站点可帮助人员生成有效的常规表达式。 试一试http://www.jslab.dk/tools.regex.php
除了约翰hartsocks的回答:如果第一个值大于第二个值,设置浮点值以在值周围交换后添加一个检查
function Check(myValue,myString)
{
var myFloatValues = (mystring.replace(/\(*|\)*|\s*/g, "")).split("-");
myFloatValues[0] = parseFloat(myFloatValues[0]);
myFloatValues[1] = parseFloat(myFloatValues[1]);
if (myFloatValues[0] > myFloatValues[1]) // swap
{
var temp = myFloatValues[0];
myFloatValues[0] = myFloatValues[1];
myFloatValues[1] = temp;
}
if (myFloatValues[0] < myValue && myFloatValues[1] > myValue) // this will be a problem if you dont swap them
return true;
return false;
}
Pesuo代码:
// Our variables
float num1;
float num2;
string myString = "(999.08) - (1025.67)";
// Split the data string on - character
arrParts[] = myString.split("-");
// Loop through each resulting split
for int i = 0; i < arrParts.Count; i++)
{
// Trim result to remove whitespace
arrParts[i] = arrParts[i].trim();
// Take all the characters in string except first and last
arrParts[i] = arrParts[i].substring(1, part.length-2);
}
// Cast out numbers
num1 = (float)arrParts[0];
num2 = (float)arrParts[1];
解决方案假设
假设输入字符串格式正确,并且将提供不少于或多于2个有效浮点数。
对于范围计算:
有两种方法,既可以从两者中减去也可以得到绝对值来确定范围,或者采用较长的方法来保证较小的数字用于较大的
关于正则表达式的注释
我会反对在可能的情况下使用正则表达式(尽管这是非常主观的),因为它可以在将来将此代码转换为一项艰巨的任务。
如果您确实使用正则表达式,请确保以预期的输入格式进行注释以防止这种情况发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.