如何比较C#中的货币或字母数字值

时间:2016-12-21 10:21:22

标签: c#

从应用程序中提取的值是字符串格式的ex。 “$ 0.38”。因此,我使用IsDigit隔离给定字符串中的每个字符,然后使用字符串构建器将它们附加在一起。数字也可以是字母数字,如“12,365.23 AS”。有没有办法从给定的字符串中只恢复数字部分(以及小数)。 但我收到的输出是“38”而不是“0.38”。我还想比较给定的字符串值位于提供的upperLimit和lowerLimit之间。 请让我知道如何继续这样做。

string Value = "$0.38";

int upperLimit = 2500;
int lowerLimit = 50000;

StringBuilder sb = new StringBuilder();
//sb.Append(someString);
foreach (char amin in Value)
{
    if (System.Char.IsDigit(amin))
    {
        sb.Append(amin);
    }
}
int compareVal = Convert.ToInt32(sb.ToString());

Console.WriteLine("value for comparision" + " " + compareVal);

3 个答案:

答案 0 :(得分:2)

有两个原因可以获得SELECT DISTINCT IF(name2 IS NULL, name, ID) AS ID, IF(name2 IS NULL, name, Company) AS Company, IF(name2 IS NULL, 'NOT FOUND', 'FOUND') AS Status FROM ( SELECT DISTINCT CASE WHEN t1.id = t2.id THEN t1.id WHEN t1.name = t2.name THEN t2.id ELSE t1.id END AS ID, CASE WHEN t1.id = t2.id THEN t2.company WHEN t1.name = t2.name THEN t2.company ELSE t1.name END AS Company, t1.name, (SELECT Table2.name FROM Table2 WHERE Table2.name = t1.name LIMIT 1) AS name2 FROM Table1 AS t1 LEFT JOIN Table2 AS t2 ON (t1.id = t2.id) OR (t1.name = t2.name)) AS t ORDER BY ID;

  1. 38看起来像StringBuilder,因为"038"不是数字(就像".")。
  2. "$"返回一个不允许十进制数字的整数。
  3. 货币的更好数据类型是Convert.ToInt32(...),这是一种高精度浮点数据类型。

    尝试

    decimal

    代替。

    修改

    要使用demo of existing example,您必须在文件中使用正确的命名空间:

    var amount = decimal.Parse(Value , NumberStyles.Currency)
    var isInLimit = upperLimit <= amount && amount <= lowerLimit; // i guess you swapped upper and lower limit btw. ;)
    

答案 1 :(得分:2)

最好的方法是使用validateNumber: function(value){ var regexValidation = new RegExp("^[0-9]+$"); return regexValidation.test(value); }, isNumber: function(event) { var value = $(event.target).val(); if (this.validateNumber(value)) { value = value.replace('.', ''); $(event.target).val(value); } else if (value.length > 6) { value = value.substr(0, 6); } $(event.target).val(value); } 的一个重载:

function insertUser(){
  jQuery("#htmlContent");	          //placeCaretAtEnd(document.getElementById("htmlContent"));
  insertChar('@');
}

function insertChar(char) {
			var range = window.getSelection().getRangeAt(0);
			//console.log(range);
			if (range.startContainer.nodeType == Node.TEXT_NODE) {
				range.startContainer.insertData(range.endOffset, char);
			}
		}

function placeCaretAtEnd(el) {

  el.focus();
  if (typeof window.getSelection != "undefined"
      && typeof document.createRange != "undefined") {
    var range = document.createRange();
    range.selectNodeContents(el);
    range.collapse(true);
    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
  } else if (typeof document.body.createTextRange != "undefined") {
    var textRange = document.body.createTextRange();
    textRange.moveToElementText(el);
    textRange.collapse(atStart);
    textRange.select();
  }
}

注意使用NumberStyles enum。这样你就可以控制exaclty解析。

答案 2 :(得分:1)

您省略了小数点,并且您没有使用小数数据类型来保存转换后的值。真正的方法是将货币字符串转换为十进制数字:

CultureInfo usCulture = new CultureInfo("en-US)";
decimal amount = decimal.Parse(Value, NumberStyles.Currency, usCulture);

然后,您可以执行正确的数字比较:

if (amount <= upperLimit && amount >= lowerLimit)
    ....

我首先将问题标记为重复,但后来改变了主意。我仍然认为它与:Convert any currency string to double

非常相关