[英]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.