查看: 1134|回复: 0

[讨论] 数字位数多转为单位(ai生成的脚本)【补档]

[复制链接]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2025-3-7 22:21:39 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 ppspssss 于 2025-3-9 14:29 编辑

由于此贴为之前电脑有的草稿存档,被我找到出来,但注释的是没有存档,因而没注释 (原贴发贴日期2024.8.13)
使用为:百度AIhttps://chat.baidu.com/
那时还没有deepseek 是老版百度ai,现在问的话应该会不同

#1(国际英文常用单位,千k,百万m,十亿b,万亿(兆)t)
默设问ai是会用英文单位,中国单位则需加额外的问题 (我一开始就看上去感觉不对劲又不知哪里,很长时间才反应过来是英文单位)
[fold=1][pre lang="ruby"]__END__
def format_number_with_unit(number)
  units = ['', '千', '百万', '十亿', '万亿']
  exponent = 0
  while number >= 1000
    number /= 1000.0
    exponent += 1
  end
  
  # 为了避免小数点后的零过多,我们可以四舍五入到指定的小数位数
  # 这里以四舍五入到小数点后一位为例
  formatted_number = number.round#(1) #basic #低版本ruby无round(位数),因此不用
  #formatted_number = number #b
  
  # 如果数字小于1且大于0,我们可能想要以“0.x”的形式显示它,而不是“x”
  # 但这取决于你的具体需求
  if formatted_number < 1 && formatted_number > 0
    formatted_number_str = formatted_number.to_s
  else
    # 对于整数部分,去掉尾随的.0
    formatted_number_str = formatted_number.to_i.to_s
  end
  
  # 如果指数为0,即原数小于1000,则不添加单位
  return formatted_number_str + (exponent > 0 ? units[exponent] : '')
end

# 测试函数
#p format_number_with_unit(1000)       # 输出: 1千
#p format_number_with_unit(1000000)    # 输出: 1百万
#p format_number_with_unit(10000000)   # 输出: 10百万
#p format_number_with_unit(1000000000) # 输出: 10亿 #basic
#p format_number_with_unit(1000000000) # 输出: 1十亿
#p format_number_with_unit(100000000000) # 输出: 100十亿
#p format_number_with_unit(1000000000000) # 输出: 1万亿
#p format_number_with_unit(1234567)    # 输出: 123.5万(四舍五入)#basic
p format_number_with_unit(1234567)    # 输出: 123万#b
#p format_number_with_unit(500)        # 输出: 500(没有单位,因为小于1000)[/pre][/fold]

#2 (输出错误有小数无法使用,好像是失败了因为不应该有powers_of_ten那个指定位数要再加额外问题再问AI (具体问什么忘了,纪录没了),请看第3个脚本才是能正常使用)
[fold=2][pre lang="ruby"]__END__
def format_number_with_unit(number)
  units = ['', '万', '亿', '万亿']
  powers_of_ten = [0, 4, 8, 12]

  # 找到最大的、小于或等于number的10的幂次
  power_index = 0
  while number >= 10**(powers_of_ten[power_index] + 1)
    power_index += 1
    break if power_index == powers_of_ten.length
  end

  # 使用sprintf进行四舍五入(保留两位小数)
  # 注意:%0.2f 是格式化字符串,表示浮点数,保留两位小数
  # 我们要先除以对应的10的幂次,然后再格式化
  formatted_number = sprintf("%.2f", number / 10**powers_of_ten[power_index])
  
  # 附加单位
  formatted_number + units[power_index]
end
#__END__
# 示例
p format_number_with_unit(123)       # 输出: 123.00
p format_number_with_unit(12345)     # 输出: 1.23万
p format_number_with_unit(123456789) # 输出: 1.23亿
p format_number_with_unit(1234567890123) # 输出: 1.23万亿

[/pre][/fold]
#3 (中国单位版本)

[pre lang="ruby"]__END__
def format_number_with_unit(number)
  units = ['', '万', '亿', '万亿']
  exponent = 0
  while number >= 10000
    number /= 10000.0
    exponent += 1
  end
  
  # 为了避免小数点后的零过多,我们可以四舍五入到指定的小数位数
  # 这里以四舍五入到小数点后一位为例
  formatted_number = number#.round(1) #basic #低版本ruby无round(位数),因此不用

  #formatted_number = number #b
  
  # 如果数字小于1且大于0,我们可能想要以“0.x”的形式显示它,而不是“x”
  # 但这取决于你的具体需求
  if formatted_number < 1 && formatted_number > 0
    formatted_number_str = formatted_number.to_s
  else
    # 对于整数部分,去掉尾随的.0
    formatted_number = sprintf("%.3f", formatted_number)
  # p formatted_number
    formatted_number_str = formatted_number.to_s
  end
  
  # 如果指数为0,即原数小于1000,则不添加单位
  return formatted_number_str + (exponent > 0 ? units[exponent] : '')
end

# 测试函数
p format_number_with_unit(-88888888888)
p format_number_with_unit(0.1111)
p format_number_with_unit(1234)       # 输出: 1千
p format_number_with_unit(12345)    # 输出: 1万
p format_number_with_unit(123456)   # 输出: 12万
p format_number_with_unit(1234567) # 输出: 123万
p format_number_with_unit(12345678) # 输出: 1234万
p format_number_with_unit(123456789) # 输出: 1亿
p format_number_with_unit(1234567891) # 输出: 12亿
p format_number_with_unit(12345678912) # 输出: 123亿
p format_number_with_unit(123456789123) # 输出: 1234亿
p format_number_with_unit(1234567891234) # 输出: 1万亿
p format_number_with_unit(12345678912345) # 输出: 12万亿
#p format_number_with_unit(1000000000) # 输出: 10亿 #basic
#p format_number_with_unit(1000000000) # 输出: 1十亿
#p format_number_with_unit(100000000000) # 输出: 100十亿
#p format_number_with_unit(1000000000000) # 输出: 1万亿
#p format_number_with_unit(1234567)    # 输出: 123.5万(四舍五入)#basic
#p format_number_with_unit(1234567)    # 输出: 123万#b
#p format_number_with_unit(500)        # 输出: 500(没有单位,因为小于1000)[/pre]
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部