2012-03-23 4 views
2

После выполнения sqrt()проверьте, содержит ли числовая строка десятичное число?

Как я могу проверить, содержит ли результат только целые числа или нет?

Я думал, что Regex проверяет десятичное число - если оно содержит десятичное число, это означает, что он не равномерно распределялся на целые числа. Который будет достаточно информации для меня.

но этот код работает ... разве

result = sqrt(stringContainingANumber); 
decimal = new RegExp("."); 
document.write(decimal.test(result)); 

я держал пари, что есть и другие способы, чтобы сделать то же самое, хотя.

+0

Возможный дубликат [Проверить, является ли число имеет десятичное место/целое число] (http://stackoverflow.com/questions/2304052/check-if-a-number-has-a-decimal-place-is-a-whole-number) –

ответ

7

. означает любой символ. Вы должны процитировать точку. "\".

Или вы могли бы проверить

if (result > Math.floor(result)) { 
    // not an decimal 
} 
+0

Это имело для меня наибольший смысл. Спасибо друг! –

+0

не работает более чем на 15 dighits – Bachas

+0

Несомненно, поскольку номер javascript является двойным с точностью до 15 цифр. Поэтому вам нужно следить за числовыми ошибками определенных диапазонов результатов. –

1

"." имеет смысл в синтаксисе regex, который является «чем-либо», вам нужно избежать его, используя «\».

1

Использование indexOf():

​var myStr = "1.0"; 
myStr.indexOf("."); // Returns 1 

// Other examples 
myStr.indexOf("1"); // Returns 0 (meaning that "1" may be found at index 0) 
myStr.indexOf("2"); // Returns -1 (meaning can't be found) 
+1

+1 для использования '.indexOf()' вместо regex, поскольку он проще и быстрее, чем регулярное выражение для этой конкретной проблемы. – jfriend00

3

Вы можете использовать % оператор:

result % 1 === 0; // rest after dividing by 1 should be 0 for whole numbers 
+0

Но я предполагаю, что 'result' - это уже номер здесь, так как это результат функции' sqrt() '. Я не уверен, что вы решаете то, что спросил ОП. – jfriend00

+0

@ jfriend00: Хорошая добыча. Тогда еще более прямолинейно использовать оператор '%', я думаю. – pimvdb

0

Если его строка, мы можем просто использовать функцию разделения, а затем проверить длина массива возвращается. Если его больше 1, то он имеет десятичную точку еще не :). Это не работает для чисел, хотя :(. Пожалуйста, смотрите последнее редактирование. Она работает на строку, а сейчас :)

function checkDecimal() { 
    var str = "202.0"; 
    var res = str.split("."); 
    alert(res.length >1); 
    var str1 = "20"; 

    alert(str1.split(".").length>1); 
} 

Надеется, что это поможет кому-то. Счастливый обучения :)

0

Вы ищете для проверки строки, содержащие десятичных цифр, вы можете попробовать, как этот

var num = "123.677"; 
if (!isNaN(Number(num)) { 
alert("decimal no"); 
} 
else { 
alert("Not a decimal number"); 
} 
Смежные вопросы