跳到主要内容
🚨 重要提示

本项目目前仍处于早期开发阶段,核心功能尚未完全实现,语法规范和工具链仍在持续完善中。

数字类型(Numeric Type)

🐳类型简介

整数 & 小数类型(Number Type)

类型占用空间
(字节)
描述
number可变可表示整数或小数
integer可变高精度整数
decimal可变高精度浮点数

🏅语法示例

  • 定义一个数字:
number num = 2025;
num.isInfinity() // result: false
num.isFinite() // result: true
num.isPositive() // result: true
num.isNegative() // result: false
num.isNaN() // result: false
num.isInteger() // result: true
num.isDecimal() // result: false
num.toString() // result: "2025"

number decimalNum = -.123456; // -0.123456
decimalNum.isInfinity() // result: false
decimalNum.isFinite() // result: true
decimalNum.isPositive() // result: false
decimalNum.isNegative() // result: true
num.isNaN() // result: false
num.isInteger() // result: false
num.isDecimal() // result: true
num.toString() // result: "-0.123456"

number anOtherDecimalNum = 2f; // 使用 f 结尾也可以表示浮点数,与 2.0, 2.00 等都等价

number positiveFinity = Infinity
positiveFinity.isInfinity() // result: true
positiveFinity.isFinite() // result: false
positiveFinity.isPositive() // result: true
positiveFinity.isNegative() // result: false
positiveFinity.isNaN() // result: false
positiveFinity.isInteger() // result: false
positiveFinity.isDecimal() // result: false
positiveFinity.toString() // result: "+Infinity"

number negativeFinity = -Infinity
negativeFinity.isInfinity() // result: true
negativeFinity.isFinite() // result: false
negativeFinity.isPositive() // result: false
negativeFinity.isNegative() // result: true
negativeFinity.isNaN() // result: false
negativeFinity.isInteger() // result: false
negativeFinity.isDecimal() // result: false
negativeFinity.toString() // result: "-Infinity"

number notANumber = NaN;
notANumber.isInfinity() // result: false
notANumber.isFinite() // result: false
notANumber.isPositive() // result: false
notANumber.isNegative() // result: false
notANumber.isNaN() // result: true
notANumber.isInteger() // result: false
notANumber.isDecimal() // result: false
negativeFinity.toString() // result: "NaN"
  • 数字比较:
1 == 1.0 // result: true
  • 数字转换为字符串:
12.toString(10) // "1"
12.toString(10) // "1"
12.00.toString(10) // "12.0"
NaN.toString() // "NaN"

// TODO 保留小数位数,保留几位有效数字
// TODO 科学计数法转字符串
  • 字符串转数字:
"Infinity".toNumber() // result: Infinity
"+Infinity".toNumber() // result: Infinity
"-Infinity".toNumber() // result: -Infinity

"infinity".toNumber() // result: NaN
  • 科学计数法
// TODO
  • 四舍五入:
// TODO
  • 取模:
-1 % 5 // result: 4
-1 % -5 // result: -1
1 % -5 // result: -4
注意

负数取模问题在不同编程语言中结果可能不同,例如 -1 mod 5,Java 语言中结果为 -1,Python 语言中结果为 4

  • 整除:
Math.integerDivision(-1, 5) // result: -1
-1.integerDivision(5) // result: 0.2

-1 / 5 // result: -0.2
Math.division(-1, 5) // result: -0.2
  • 加减乘除:
1.1 + 2 // result: 3.1

3 - 5.2 // -2.2

6 * 8 // result: 48

1 / 3 // result: 0.3333333333333333
2 / 3 // result: 0.6666666666666666
  • 取绝对值:
-1.abs() // result: 1
Math.abs(-1) // result: 1
  • 取整数部分
123.456.integerPart() // 123
123.456.decimalPart() // 0.456

-123.456.integerPart() // -123
-123.456.decimalPart() // -0.456

浮动小数类型

类型占用空间
(字节)
取值范围最小值
object.MIN_VALUE
最大值
object.MAX_VALUE
描述
float4 byte[2-149, (2-2-23)·2127]1.4e-45
(0x1.0p-126)
3.4028235e+38
(0x1.FFFFFE0000000p+127)
32位浮动小数
+float4 byte需要确认需要确认需要确认32位非负浮动小数
-float4 byte需要确认需要确认需要确认32位非正浮动小数
double8 byte[2-1074, (2-2-52)·21023]4.9e-324
(0x0.0000000000001p-1022)
1.7976931348623157e+308
(0x1.FFFFFFFFFFFFFp+1023)
64位浮动小数
+double8 byte需要确认需要确认需要确认64位非负浮动小数
-double8 byte需要确认需要确认需要确认64位非正浮动小数

通用数字类型

类型描述
number支持保存整数和小数,对于执行效率要求不高的场景,可使用该类型减少心智负担
integer高精度整数(能够精确表示任意大小的整数)
decimal高精度浮点数(能够精确表示任意位小数),浮点数运算输出17位长度的结果,但只有15个数字是准确的

参考文献

IEEE 754 标准