从应用程序中提取的值是字符串格式的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);
答案 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;
:
38
看起来像StringBuilder
,因为"038"
不是数字(就像"."
)。"$"
返回一个不允许十进制数字的整数。货币的更好数据类型是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
非常相关