<reponame>bigfoolliu/liu_aistuff<filename>language/python/python/variable_type/number/number_demo.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
python数字操作以及格式化相关
"""

from fractions import Fraction


def format_demo():
    """格式化输出数字示例"""
    x = 1234.567

    print(format(x, "0.2f"))  # 保留两位小数
    print(format(x, ">10.1f"))  # 保留一位小数，靠右边，共10位数
    print(format(x, "<10.1f"))  # 保留一位小数，靠左边，共10位数
    print(format(x, "^10.1f"))  # 保留一位小数，靠中间，共10位数

    print(format(x, ','))  # 包含千位的，为分隔符，1,234.567
    print(format(x, '0,.1f'))  # 1,234.6

    print(format(x, 'e'))  # 使用指数计数法
    print(format(x, '0.2E'))


def trans_demo():
    """二，八，十六进制的转换"""
    x = 1234

    # 输出的结果都是带有前缀的
    x_b = bin(x)
    print("二进制:", x_b)  # 0b10011010010
    x_o = oct(x)
    print("八进制:", x_o)  # 0o2322
    x_x = hex(x)
    print("十六进制:", x_x)  # 0x4d2

    # 输出的结果不带前缀的
    print(format(x, 'b'))
    print(format(x, 'o'))
    print(format(x, 'x'))

    # 其他的进制转换为十进制, 原始的进制数为字符串格式
    x_b_int = int(x_b, 2)
    print(x_b_int)

    x_o_int = int(x_o, 8)
    print(x_o_int)

    x_x_int = int(x_x, 16)
    print(x_x_int)


def bytes_trans_demo():
    """
    字节和大整数之间的转换
    此处的big 和 little 仅指定了构建整数时候字节的高低排列顺序
    """
    x = 123456789876543210

    # 大整数转换为字节字符串
    x_bytes_big = x.to_bytes(16, 'big')
    print(x_bytes_big)
    x_bytes_little = x.to_bytes(16, 'little')
    print(x_bytes_little)

    # 字节字符串转换为大整数
    bytes_big = b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xb6\x9bK\xd9\xb3\x8e\xea'
    bytes_big_int = int.from_bytes(bytes_big, 'big')
    print(bytes_big_int)

    bytes_little = b'\xea\x8e\xb3\xd9K\x9b\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00'
    bytes_big_little = int.from_bytes(bytes_little, 'little')
    print(bytes_big_little)


def fraction_demo():
    """分数的运算"""
    a = Fraction(2, 4)
    b = Fraction(3, 6)

    c = a * b  # 1/6
    print(c)

    # 获取分子
    print(c.numerator)

    # 获取分母
    print(c.denominator)

    # 分数转换为浮点数
    print(float(c))

    # 限制分母在指定的数字范围
    c = Fraction(21, 28)
    print(c.limit_denominator(20))  # 3/4

    # 浮点数转换为分数
    c = 2.75
    c_float = Fraction(*c.as_integer_ratio())
    print(c_float)


def main():
    # format_demo()
    # trans_demo()
    # bytes_trans_demo()
    fraction_demo()


if __name__ == '__main__':
    main()

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
python数字操作以及格式化相关
"""

from fractions import Fraction


def format_demo():
    """格式化输出数字示例"""
    x = 1234.567

    print(format(x, "0.2f"))  # 保留两位小数
    print(format(x, ">10.1f"))  # 保留一位小数，靠右边，共10位数
    print(format(x, "<10.1f"))  # 保留一位小数，靠左边，共10位数
    print(format(x, "^10.1f"))  # 保留一位小数，靠中间，共10位数

    print(format(x, ','))  # 包含千位的，为分隔符，1,234.567
    print(format(x, '0,.1f'))  # 1,234.6

    print(format(x, 'e'))  # 使用指数计数法
    print(format(x, '0.2E'))


def trans_demo():
    """二，八，十六进制的转换"""
    x = 1234

    # 输出的结果都是带有前缀的
    x_b = bin(x)
    print("二进制:", x_b)  # 0b10011010010
    x_o = oct(x)
    print("八进制:", x_o)  # 0o2322
    x_x = hex(x)
    print("十六进制:", x_x)  # 0x4d2

    # 输出的结果不带前缀的
    print(format(x, 'b'))
    print(format(x, 'o'))
    print(format(x, 'x'))

    # 其他的进制转换为十进制, 原始的进制数为字符串格式
    x_b_int = int(x_b, 2)
    print(x_b_int)

    x_o_int = int(x_o, 8)
    print(x_o_int)

    x_x_int = int(x_x, 16)
    print(x_x_int)


def bytes_trans_demo():
    """
    字节和大整数之间的转换
    此处的big 和 little 仅指定了构建整数时候字节的高低排列顺序
    """
    x = 123456789876543210

    # 大整数转换为字节字符串
    x_bytes_big = x.to_bytes(16, 'big')
    print(x_bytes_big)
    x_bytes_little = x.to_bytes(16, 'little')
    print(x_bytes_little)

    # 字节字符串转换为大整数
    bytes_big = b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\xb6\x9bK\xd9\xb3\x8e\xea'
    bytes_big_int = int.from_bytes(bytes_big, 'big')
    print(bytes_big_int)

    bytes_little = b'\xea\x8e\xb3\xd9K\x9b\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00'
    bytes_big_little = int.from_bytes(bytes_little, 'little')
    print(bytes_big_little)


def fraction_demo():
    """分数的运算"""
    a = Fraction(2, 4)
    b = Fraction(3, 6)

    c = a * b  # 1/6
    print(c)

    # 获取分子
    print(c.numerator)

    # 获取分母
    print(c.denominator)

    # 分数转换为浮点数
    print(float(c))

    # 限制分母在指定的数字范围
    c = Fraction(21, 28)
    print(c.limit_denominator(20))  # 3/4

    # 浮点数转换为分数
    c = 2.75
    c_float = Fraction(*c.as_integer_ratio())
    print(c_float)


def main():
    # format_demo()
    # trans_demo()
    # bytes_trans_demo()
    fraction_demo()


if __name__ == '__main__':
    main()
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # author: bigfoolliu python数字操作以及格式化相关 格式化输出数字示例 # 保留两位小数 # 保留一位小数，靠右边，共10位数 # 保留一位小数，靠左边，共10位数 # 保留一位小数，靠中间，共10位数 # 包含千位的，为分隔符，1,234.567 # 1,234.6 # 使用指数计数法 二，八，十六进制的转换 # 输出的结果都是带有前缀的 # 0b10011010010 # 0o2322 # 0x4d2 # 输出的结果不带前缀的 # 其他的进制转换为十进制, 原始的进制数为字符串格式 字节和大整数之间的转换     此处的big 和 little 仅指定了构建整数时候字节的高低排列顺序 # 大整数转换为字节字符串 # 字节字符串转换为大整数 分数的运算 # 1/6 # 获取分子 # 获取分母 # 分数转换为浮点数 # 限制分母在指定的数字范围 # 3/4 # 浮点数转换为分数 # format_demo() # trans_demo() # bytes_trans_demo()