设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

数字位数多转为单位(ai生成的脚本)

查看数: 365 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-8-13 22:28

正文摘要:

本帖最后由 ppspssss 于 2024-9-1 09:44 编辑 以下仅作参考用途,脚本由AI篇写,未經详细测试 游戏的有时数字过大,有的游戏数值很高金钱很大 ,就想简略化看到多少 显示出数字比较直观不会太长,缺点是会较小的数 ...

回复

SailCat 发表于 2024-9-1 02:11:20
本帖最后由 SailCat 于 2024-9-1 02:21 编辑

不建议使用除以1000.0, 10000.0这样的操作
原因是1000.0这个数字没办法精确保存,简单的办法是to_s后,直接切字符串
随手写了一个,没仔细测
RUBY 代码复制
  1. # 用英文表示(千进制)配置第一行,中文表示(万进制)配置第二行
  2. EXP_WORDS = ["", "K", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q"]
  3. # EXP_WORDS = ["", "万", "亿", "兆", "京", "垓", "秭", "穰", "沟", "涧"]
  4.  
  5. # 用英文表示(千进制)配置第一行,中文表示(万进制)配置第二行
  6. EXP_SIZE = 3
  7. # EXP_SIZE = 4
  8.  
  9. # 最小位数,不到此位数会降级显示(如设为2,23000会显示为23000而不是2万)
  10. MIN_DIGITS = 1
  11.  
  12. # 小数点后有效数字(12.0的0有意义,转换会保留)
  13. DECIMALS = 0
  14.  
  15.  
  16. #--------------------------------------------------------------------------
  17. # ● 转换大数字的显示位数
  18. #     x : 要转换的数字,必须是整数(Fixnum/Bignum),可正可负
  19. #     method : 舍入处理规则,合法取值有5个
  20. #       "round" : 四舍五入(默认)1.4=>1  1.5=>2  -1.4=>-1  -1.5=>-2
  21. #       "ceil"  : 向上取整        1.4=>2  1.5=>2  -1.4=>-1  -1.5=>-1
  22. #       "floor" : 向下取整        1.4=>1  1.5=>1  -1.4=>-2  -1.5=>-2
  23. #       "trunc" : 向内取整        1.4=>1  1.5=>1  -1.4=>-1  -1.5=>-1
  24. #       "away"  : 向外取整        1.4=>2  1.5=>2  -1.4=>-2  -1.5=>-2
  25. #       (写成不是另外四种取值的字符串,都会以"round"处理)
  26. #--------------------------------------------------------------------------
  27. def convert_number(x, method = "round")
  28.   # 负数前置处理
  29.   neg = x < 0
  30.   # 字符串度量化
  31.   str = x.abs.to_s
  32.   len = str.length
  33.   exp = (len - MIN_DIGITS) / EXP_SIZE
  34.   delimit = exp * EXP_SIZE
  35.   # 小数点前截取
  36.   before = str[0..-delimit - 1].to_i
  37.   # 小数点后截取
  38.   after = delimit > 0 ? str[-delimit, DECIMALS].to_i : 0
  39.   # 进位处理
  40.   if delimit > DECIMALS
  41.     round = str[-delimit + DECIMALS, 1].to_i
  42.     case round
  43.     when 0
  44.       carry = (method == (neg ? "floor" : "ceil") || method == "away") &&
  45.         str[-delimit +  DECIMALS + 1..-1].to_i == 0
  46.     when 1..4
  47.       carry = (method == (neg ? "floor" : "ceil") || method == "away")
  48.     when 5..9
  49.       carry = (method != (neg ? "ceil" : "floor") && method != "trunc")
  50.     end
  51.     if carry
  52.       after += 1
  53.       if after == 10 ** DECIMALS
  54.         before += 1
  55.         after = 0
  56.       end
  57.     end
  58.   end
  59.   # 按有无小数点分别输出
  60.   if DECIMALS > 0 and delimit > 0
  61.     digits = [DECIMALS, delimit].min
  62.     result = sprintf("%d.%0#{digits}d%s", before, after, EXP_WORDS[exp])
  63.   else
  64.     result = sprintf("%d%s", before, EXP_WORDS[exp])
  65.   end
  66.   # 负数后置处理,返回
  67.   return neg ? "-" + result : result
  68. end
soulsaga 发表于 2024-8-28 17:48:51
是在取整时有上限?
939034448 发表于 2024-8-28 17:07:10
ppspssss 发表于 2024-8-14 10:28
回2楼:谢谢,已改正,輸出:1百万
回3楼:应该会支持更长的数字?我是问AI才知道Ruby好像能够输入任意长 ...

直接计算也许是支持的,但是你贴出来的函数应该是有设计到强转,数据类型转换这种,可能会有所限制,ruby的数据类型确实不严格,基本会自适应
ppspssss 发表于 2024-8-14 10:28:45
本帖最后由 ppspssss 于 2024-8-14 15:07 编辑
alexncf125 发表于 2024-8-14 00:38
p format_number_with_unit(1234567)输出了1百万哦


回2楼:谢谢,已改正,輸出:1百万
回3楼:应该会支持更长的数字?我是问AI才知道Ruby好像能够输入任意长度的整数和计算, 随机数rand也能任意长度, 不过srand随机种子不能超过4字节最大值限制
问AI: 怎么用ruby加大位数,本来4字节太小,如何扩大位数
939034448 发表于 2024-8-14 02:32:39
超过万亿会出错是因为数据溢出了吧,没准输入30亿也会报错
alexncf125 发表于 2024-8-14 00:38:57
p format_number_with_unit(1234567)输出了1百万哦

点评

但脚本第36行楼主写的是# 输出: 123万#b  发表于 2024-8-14 10:20
这个好像是符合要求的,楼主要的就是省略次级单位只保留最大单位  发表于 2024-8-14 02:34
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-20 06:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表