S2 Cookbook: Numbers

From Dreamwidth Notes
Jump to: navigation, search

Unfortunately, the only numbers available in S2 are integers.

Declaring an integer variable

var int b = 6;

Arithmetic

var int a = 8;
var int b = 6;
var int c = 3;
 
# 14
print $a + $b;
print "\n";
 
# -2
print $b - $a;
print "\n";
 
# 2
print $a / $c;
print "\n";
 
# 18
print $b * $c;
print "\n";


Comparing two numbers to see if they are equal or one is lesser/greater

var int a = 8;
var int b = 6;
var int c = 6;
 
# prints "Equal"
# if $b is equal to $c
if( $b == $c ) {
    print "Equal";
} else {
    print "Not equal";
}
 
# prints "Less" -- ie, $a is less than $b
if( $a < $b ) {
    print "Less";
# $a is greater than $b
} elseif( $a > $b ) {
    print "Greater";
} else {
    print "Equal";
}
 
# prints "Positive
# if a is less than or equal to 0
if( $a <= 0 ) {
    print "Zero or negative";
} else {
    print "Positive";
}
 
# prints "Not so big."
# if a is equal to 100 or greater
if( $a >= 100 ) {
    print "Big!";
} else {
    print "Not so big.";
}

Seeing if a number is odd or even

The mod operation, signified by the % symbol, can tell you if a number is odd or even. Mod a number by 2, and if the result is equal to 1, the number is odd. If the result is equal to 0, the number is even.

var int odd = 8;
 
# prints "Odd"
if( $odd % 2 == 1 ) {
    print "Odd";
} else {
    print "Even";
}
 
var int even = 6;
 
# prints "Even"
if( $even % 2 == 0 ) {
    print "Even";
} else {
    print "Odd";
}

Pad a number with 0s to a certain number of digits

Use the zeropad function to get a string that's padded with 0s to a certain number of digits:

var int label = 1;
# 001
print zeropad($label, 3) + "<br />";
 
# works on strings that are integers, too!
var string fake_int = "2";
# 0002
print zeropad($fake_int, 4) + "<br />";
 
# this won't work because "A2" won't convert to an integer correctly
var string fake_label = "A2";
# 000
print zeropad($fake_label, 3) + "<br />";

Get a random number

You can create random numbers using the two kinds of rand functions:

# returns a random number between 1 and 10
var int pick = rand(10);
# returns a random number between 11 and 20
var int pick2 = rand(11, 20);
# returns a random number between the two random numbers
var int pick3 = rand($pick, $pick2);

Convert an integer to a string

The print statement and some operators will implicitly convert integers to strings:

# Example function that appends "th" to an integer
function ordinal(int num) : string
{
    return $num+"th"; # here the + operator converts to string
}
 
var int nine = 9;
# 9
print "$nine"; # print $nine; works as well
# 9th
print ordinal($nine);

However, if you find you need to explicitly convert, you can use the string() function:

var string nine = string(9);
# 9
print "$nine";

Convert a string to an integer

To convert the other way, you will probably need the int() function:

var int ten = int("10");
var int sum = ten + 9;
# 19
print "$sum";
# This will yield the error "Can't initialize variable 'ten' of type int with expression of type string"
var int ten = 1 + "9";