跳至內容

數學

數值類型

兩種最常見的數字類型是 Int32Float64。名稱中的數字表示大小(以位元為單位):Int32 是 32 位元的整數類型Float64 是 64 位元的浮點數

  • 整數字面值寫成一系列一或多個十進位數字(0-9),沒有前導零。預設類型是 Int32
  • 浮點數值寫成一系列二或多個十進位數字(0-9),中間某處有一個點(.),表示小數點。預設類型是 Float64

所有數值類型都允許在中間的任何位置使用底線。這對於以更易讀的方式書寫大數字很有用:100000 可以寫成 100_000

p! 1, typeof(1)
p! 1.0, typeof(1.0)
p! 100_000, typeof(100_000)
p! 100_000.0, typeof(100_000.0)

浮點數值會印出小數點。整數值則不會。

資訊

還有許多其他的數值類型,但它們大多數僅適用於特殊用途,例如二進位協定、特定的數值演算法和效能最佳化。您可能不需要它們來進行日常程式設計。

請參閱整數字面值參考浮點數字面值參考以獲得所有基本數字類型和替代表示法的完整參考。

算術

相等與比較

數值相同的數字在相等運算子 == 方面被認為是相等的,與其類型無關。

p! 1 == 1,
  1 == 2,
  1.0 == 1,
  -2000.0 == -2000

除了相等運算子之外,還有比較運算子。它們決定兩個值之間的關係。與相等性一樣,可比較性也與類型無關。

p! 2 > 1,
  1 >= 1,
  1 < 2,
  1 <= 2

通用的比較運算子是 <=>,也稱為太空船運算子,因為它的外觀。它會比較其運算元,並傳回一個值,該值為零(兩個運算元相等)、正值(第一個運算元較大)或負值(第二個運算元較大)。它結合了所有其他比較運算子的行為。

p! 1 <=> 1,
  2 <=> 1,
  1 <=> 2

運算子

可以使用運算子執行基本算術運算。大多數運算子都是二元(即兩個運算元),並且以中綴表示法(即在運算元之間)書寫。有些運算子是一元(即一個運算元),並且以前綴表示法(即在運算元之前)書寫。表達式的值是運算的結果。

p! 1 + 1, # addition
  1 - 1,  # subtraction
  2 * 3,  # multiplication
  2 ** 4, # exponentiation
  2 / 3,  # division
  2 // 3, # floor division
  3 % 2,  # modulus
  -1      # negation (unary)

如您所見,大多數整數運算元之間的運算結果也是一個整數值。除法運算子(/)是個例外。它總是返回浮點數值。但是,地板除法運算子(//)會返回整數值,但顯然會縮減為整數精度。整數和浮點數運算元之間的運算總是返回浮點數值。否則,返回類型通常是第一個運算元的類型。

資訊

運算子的完整清單可在運算子參考中找到。

優先順序

當組合多個運算子時,就會出現一個問題:它們會以哪個順序執行。在數學中,有一些規則,例如乘法和除法的優先順序高於加法和減法。Crystal 運算子實作了這些優先順序規則。

括號是一種結構化運算的工具。括號中的運算式永遠優先於外部運算子。

p! 4 + 5 * 2,
  (4 + 5) * 2

資訊

所有的優先順序規則都在運算子參考中詳述。

數字方法

一些較不常見的數學運算不是運算子,而是命名方法。

p! -5.abs,   # absolute value
  4.3.round, # round to nearest integer
  5.even?,   # odd/even check
  10.gcd(16) # greatest common divisor

資訊

數值方法的完整清單可在Number API 文件中找到(也請查看子類型)。

數學方法

一些算術方法不是直接在數字類型上定義,而是在 Math 命名空間中定義。

p! Math.cos(1),     # cosine
  Math.sin(1),      # sine
  Math.tan(1),      # tangent
  Math.log(42),     # natural logarithm
  Math.log10(312),  # logarithm to base 10
  Math.log(312, 5), # logarithm to base 5
  Math.sqrt(9)      # square root

資訊

數學方法的完整清單可在Math API 文件中找到。

常數

一些數學常數可用作 Math 模組的常數。

p! Math::E,  # Euler's number
  Math::TAU, # Full circle constant (2 * PI)
  Math::PI   # Archimedes' constant (TAU / 2)