Determine if a string is numeric: Difference between revisions
(→[[Perl]]: Created perl entry) |
(+ Python and Java) |
||
Line 70: | Line 70: | ||
$string = '123'; |
$string = '123'; |
||
if(is_numeric($string)) { |
if(is_numeric($string)) { |
||
} |
|||
==[[Python]]== |
|||
s = '123' |
|||
try: |
|||
i = int(s) |
|||
# use i |
|||
except ValueError: |
|||
# s is not numeric |
|||
==[[Java]]== |
|||
String s = "123"; |
|||
try { |
|||
int i = Integer.parseInt(s); |
|||
// use i |
|||
} |
|||
catch (Exception e) { |
|||
// s is not numeric |
|||
} |
} |
Revision as of 20:27, 21 January 2007
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
Demonstrates how to implement a custom IsNumeric method in other .NET/Mono languages that do not wish to reference the Microsoft.VisualBasic.dll assembly.
VB.NET
Compiler: Microsoft (R) Visual Basic Compiler version 8.0
Dim Value As String = "123" If IsNumeric(Value) Then End If
C#
Compiler: Microsoft (R) Visual C# 2005 Compiler version 8.00
public static bool IsNumeric(string value) { value = value.Trim(); if (value == string.Empty) return false; if (char.IsSymbol(value[0]) == false && char.IsNumber(value[0]) == false) return false; if (char.IsSymbol(value[0]) && value.Length > 1 && char.IsNumber(value[1]) == false) return false; return true; } string Value = "123"; If (IsNumeric(Value)) { }
Perl
Quoting from perlfaq4:
How do I determine whether a scalar is a number/whole/integer/float?
Assuming that you don't care about IEEE notations like "NaN" or "Infinity", you probably just want to use a regular expression.
if (/\D/) { print "has nondigits\n" } if (/^\d+$/) { print "is a whole number\n" } if (/^-?\d+$/) { print "is an integer\n" } if (/^[+-]?\d+$/) { print "is a +/- integer\n" } if (/^-?\d+\.?\d*$/) { print "is a real number\n" } if (/^-?(?:\d+(?:\.\d*)?&\.\d+)$/) { print "is a decimal number\n" } if (/^([+-]?)(?=\d&\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) { print "a C float\n" }
There are also some commonly used modules for the task. Scalar::Util (distributed with 5.8) provides access to perl's internal function "looks_like_number" for determining whether a variable looks like a number. Data::Types exports functions that validate data types using both the above and other regular expressions. Thirdly, there is "Regexp::Common" which has regular expressions to match various types of numbers. Those three modules are available from the CPAN.
If you're on a POSIX system, Perl supports the "POSIX::strtod" function. Its semantics are somewhat cumbersome, so here's a "getnum" wrapper function for more convenient access. This function takes a string and returns the number it found, or "undef" for input that isn't a C float. The "is_numeric" function is a front end to "getnum" if you just want to say, Is this a float?
sub getnum { use POSIX qw(strtod); my $str = shift; $str =~ s/^\s+//; $str =~ s/\s+$//; $! = 0; my($num, $unparsed) = strtod($str); if (($str eq ) && ($unparsed != 0) && $!) { return undef; } else { return $num; } }
sub is_numeric { defined getnum($_[0]) }
Or you could check out the String::Scanf module on the CPAN instead. The POSIX module (part of the standard Perl distribution) provides the "strtod" and "strtol" for converting strings to double and longs, respectively.
PHP
<?php $string = '123'; if(is_numeric($string)) { }
Python
s = '123' try: i = int(s) # use i except ValueError: # s is not numeric
Java
String s = "123"; try { int i = Integer.parseInt(s); // use i } catch (Exception e) { // s is not numeric }