Determine if a string is numeric: Difference between revisions
(+ Python and Java) |
No edit summary |
||
Line 89: | Line 89: | ||
// s is not numeric |
// s is not numeric |
||
} |
} |
||
==[[ColdFusion]]== |
|||
Adobe's ColdFusion |
|||
<cfset TestValue=34> |
|||
TestValue: <cfoutput>#TestValue#</cfoutput><br> |
|||
<cfif isNumeric(TestValue)> |
|||
is Numeric. |
|||
<cfelse> |
|||
is NOT Numeric. |
|||
</cfif> |
|||
<cfset TestValue="NAS"> |
|||
TestValue: <cfoutput>#TestValue#</cfoutput><br> |
|||
<cfif isNumeric(TestValue)> |
|||
is Numeric. |
|||
<cfelse> |
|||
is NOT Numeric. |
|||
</cfif> |
Revision as of 20:58, 21 January 2007
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 }
ColdFusion
Adobe's ColdFusion
<cfset TestValue=34> TestValue: <cfoutput>#TestValue#</cfoutput>
<cfif isNumeric(TestValue)> is Numeric. <cfelse> is NOT Numeric. </cfif>
<cfset TestValue="NAS"> TestValue: <cfoutput>#TestValue#</cfoutput>
<cfif isNumeric(TestValue)> is Numeric. <cfelse> is NOT Numeric. </cfif>