簡體   English   中英

javascript - 查找兩個浮點數之間的范圍值

[英]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個有效浮點數。

對於范圍計算:

有兩種方法,既可以從兩者中減去也可以得到絕對值來確定范圍,或者采用較長的方法來保證較小的數字用於較大的

關於正則表達式的注釋

我會反對在可能的情況下使用正則表達式(盡管這是非常主觀的),因為它可以在將來將此代碼轉換為一項艱巨的任務。

如果您確實使用正則表達式,請確保以預期的輸入格式進行注釋以防止這種情況發生。

這就是eval *顯示其真正力量的地方。

range = Math.abs(eval(string));

*不,這不是邪惡的 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM