Compare to this demo (which can be written much more compactly but was deliberately written in this tedious manner for utmost clarity):
#!/usr/bin/perl -lw use strict; my $number0 = '1.00'; #zwon's version with NON-interpolating quotes my $number1 = 1.00; my $number2 = 1.393939393939393939393939393939393939393939393939393939 +3939393939; # exceeds length for FP precision my $number3 = 123456789.123e5; my $number4 = 123e-5; my $number5 = '123e-5' ; print "\$number0, $number0, contains a period" if $number0 =~ /\./; print "\$number0, $number0, is an Integer" if $number0 == int($number0 +); print "\$number1, $number1, contains a period" if $number1 =~ /\./; print "\$number1, $number1, is an Integer" if $number1 == int($number1 +); print "\$number2, $number2, contains a period" if $number2 =~ /\./; print "\$number2, $number2, is an Integer" if $number2 == int($number2 +); print "\$number3, $number3, contains a period" if $number3 =~ /\./; print "\$number3, $number3, is an Integer" if $number3 == int($number3 +); if ( $number4 =~ /\./ ) { # alt coding of the previous solely to + allow the else print "\$number4, $number4, contains a period"; } else { print "\tNo period in $number4"; } print "\$number4, $number4, is an Integer" if $number4 == int($number4 +); if ( $number5 =~ /\./ ) { print "\$number5, $number5, contains a period"; } else { print "\tNo period in $number5"; } print "\$number5, $number5, is an Integer" if $number5 == int($number5 +); print "\nNext, using ww's regex"; print "\n\$number0: $number0\n\$number1: $number1\n\$number2: $number2 +\n\$number3: $number3\n\$number4: $number4\n"; # CASE 0 $number0 =~ /\d+(\.)\d+/; if ($1) { print "\$number0 contains a decimal point"; } $number0 =~ s/(\d+)(\.)(\d+)/$1/; print "Integer value, if desired: $number0"; # CASE 1 $number1 =~ /\d+(\.)\d+/; if ($1) { print "\$number1 contains a decimal point"; } $number1 =~ s/(\d+)(\.)(\d+)/$1/; print "Integer value of \$number1, if desired: $number1"; # CASE 2 $number2 =~ /\d+(\.)\d+/; if ($1) { print "\$number2 contains a decimal point"; } $number2 =~ s/(\d+)(\.)(\d+)/$1/; print "Integer value of \$number2, if desired: $number2"; # CASE 3 $number3 =~ /\d+(\.)\d+/; if ($1) { print "\$number3 contains a decimal point"; } $number3 =~ s/(\d+)(\.)(\d+)/$1/; print "Integer value of \$number3, if desired: $number3"; # CASE 4 $number4 =~ /(\.)/; # Special case: Scientific notation if ($1) { print "\$number4 contains a decimal point"; } $number4 =~ s/(\d+)(\.)(\d+)/$1/; print "Integer value of \$number4, if desired: $number4"; # CASE 5 $number5 =~ /(\.)/; # Special case, as above if ($1) { print "\$number5 contains a decimal point"; } else { print "NO decimal point in \$number5, $number5"; } $number5 =~ s/(\d=)(\.)(\d+)/$1/; print "Integer value of \$number5, if desired: " . int($number5); # + using int(); otherwise prints the string literal
Output:
--> Note 1: Arguable. Integer is defined "n : any of the natural numbers (positive or negative) or zero syn: whole number" and "whole number" is defined "(Math.), a number which is not a fraction or mixed number; an integer."$number0, 1.00, contains a period $number0, 1.00, is an Integer # --> Note 1 $number1, 1, is an Integer $number2, 1.39393939393939, contains a period $number3, 12345678912300, is an Integer $number4, 0.00123, contains a period No period in 123e-5 Next, using ww's regex $number0: 1.00 $number1: 1 $number2: 1.39393939393939 $number3: 12345678912300 $number4: 0.00123 $number0 contains a decimal point Integer value, if desired: 1 $number1 contains a decimal point Integer value of $number1, if desired: 1 $number2 contains a decimal point Integer value of $number2, if desired: 1 $number3 contains a decimal point Integer value of $number3, if desired: 12345678912300 $number4 contains a decimal point Integer value of $number4, if desired: 0 NO decimal point in $number5, 123e-5 Integer value of $number5, if desired: 0
Update: revised phrasing of the parenthetical comment about the tedious (kindergarten) code.
In reply to Re^2: How to determine whether a number has a decimal component?
by ww
in thread How to determine whether a number has a decimal component?
by Xenofur
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |