| 赞 | 76 |
| VIP | |
| 好人卡 | |
| 积分 | 147 |
| 经验 | |
| 最后登录 | 2025-12-9 |
| 在线时间 | 2175 小时 |
- 梦石
- 0
- 星屑
- 14720
- 在线时间
- 2175 小时
- 注册时间
- 2016-9-20
- 回帖
- 777
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 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] |
|