Project1

标题: 数字的逗号问题 [打印本页]

作者: 土撥撥    时间: 2009-4-23 04:00
标题: 数字的逗号问题
一般在显示庞大数目时,都会每三位隔一个逗号(,)

例如:

1000000000

在新增逗号之后会变成

1,000,000,000

这样就较容易看出是10亿了

且也较美观

我想做的就是这个,每3个位隔一个逗号

却怎么想也想不出办法来

问高手们能不能救我!!

如果成功了 小的感激您一辈子!! [LINE]1,#dddddd[/LINE]版务信息:版主帮忙结贴~
作者: tommay    时间: 2009-4-23 04:01
你想在哪里显示这个?
作者: 土撥撥    时间: 2009-4-23 04:07
金钱 不过如果其它有显示数值的部分都改 我会更开心{/cy}
作者: tommay    时间: 2009-4-23 04:12
金钱的话应该可以在显示的时候用条件分歧,不过鉴于LZ的伸手行为,还是不帮你写了。
作者: tommay    时间: 2009-4-23 04:16
以下引用凌辰于2009-4-22 20:13:00的发言:

也不算伸手吧……
话说我还真不知道该怎么搞。

在脚本中的Window_Gold类里面条件分歧。
如果金钱数小于1000,直接显示
如果在1000~1000000之间,先显示后三位,再显示前面的
以此类推……

方法很简单,就是写起来可能麻烦点。
凌大不是事件派的吗,这些小伎俩其实意义不大的
[LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
作者: 凌辰    时间: 2009-4-23 04:26
以下引用tommay于2009-4-22 20:16:50的发言:
在脚本中的Window_Gold类里面条件分歧。
如果金钱数小于1000,直接显示
如果在1000~1000000之间,先显示后三位,再显示前面的
以此类推……

方法很简单,就是写起来可能麻烦点。
凌大不是事件派的吗,这些小伎俩其实意义不大的
哦哦,原理明白了- -
人家虽然是标准的事件派,但并不恨脚本啊……
只是“以事件为绝对优先”而已。
这种事又不是事件好搞的……
我总不能用显示图片吧{/gg}
作者: tommay    时间: 2009-4-23 04:32
谁说事件不好搞,搞个事件菜单,然后在该显示金钱的地方,用图片做上0~9十个数字,然后根据金钱数目的大小显示这10张图片,然后,嘎嘎……{/cy}
作者: 凌辰    时间: 2009-4-23 04:37
以下引用tommay于2009-4-22 20:32:15的发言:
谁说事件不好搞,搞个事件菜单,然后在该显示金钱的地方,用图片做上0~9十个数字,然后根据金钱数目的大小显示这10张图片,然后,嘎嘎……
果然还是显示图片嘛……
这么搞可不比脚本容易。
作者: tommay    时间: 2009-4-23 04:40
以下引用凌辰于2009-4-22 20:37:21的发言:
果然还是显示图片嘛……
这么搞可不比脚本容易。

略懂脚本其实很容易,真的- -
作者: 八云紫    时间: 2009-4-23 05:20

  1. #==============================================================================
  2. # ■ Window_Gold
  3. #------------------------------------------------------------------------------
  4. #  显示金钱的窗口。
  5. #==============================================================================

  6. class Window_Gold < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 刷新
  9.   #--------------------------------------------------------------------------
  10.   def refresh
  11.     self.contents.clear
  12.     cx = contents.text_size($data_system.words.gold).width
  13.     self.contents.font.color = normal_color
  14.     self.contents.draw_text(4, 0, 120-cx-2, 32, getgold(), 2)        
  15.     self.contents.font.color = system_color
  16.     self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
  17.   end
  18.   def getgold()
  19.     gold = $game_party.gold.to_s
  20.     bit = []
  21.     if(gold.size % 3 == 0)
  22.       time = gold.size / 3 - 1
  23.     else
  24.       time = gold.size / 3
  25.     end
  26.       time.times{|n|
  27.         bit << gold.size - (n + 1) * 3
  28.       }
  29.     bit.each_index{|n|
  30.       gold.insert( bit[n], ",")
  31.     }
  32.     return gold
  33.   end
  34. end
复制代码



作者: tommay    时间: 2009-4-23 05:28
八云大大果然很强,编出来的比偶简单多了,受教!
作者: 八云紫    时间: 2009-4-23 05:30
以下引用tommay于2009-4-22 21:28:44的发言:

八云大大果然很强,编出来的比偶简单多了,受教!


感觉不是最好的方法, 循环使用了两次~
作者: tommay    时间: 2009-4-23 05:32
以下引用火焰猫燐于2009-4-22 21:30:47的发言:

感觉不是最好的方法, 循环使用了两次~

如果有更好的方法,希望可以告诉在下,用V也行,不过估计八云大大不会在乎这东西的- -
作者: 八云紫    时间: 2009-4-23 05:36
  1.   def getgold()
  2.     gold = $game_party.gold.to_s
  3.     size = gold.size
  4.     time = size % 3 == 0 ? size / 3 - 1 : size / 3
  5.     time.times{|n|
  6.       gold.insert( size - (n + 1) * 3, ",")
  7.     }
  8.     return gold
  9.   end
复制代码


好吧,改进了一下.

用一个变量替换了原来的循环 和 原来的局部数组,感觉会快点了~
作者: TERENCE    时间: 2009-4-23 06:30
将数值每三位以「,」区隔开来也可以这么做

def commify(numstr)
  int ,frac = *numstr.split(".")
  int = int.gsub(/(\d)(?=\d{3}+$)/, '\\1,')
  int << "." << frac if frac
  return int
end

p commify("1234567890") #=> "1,234,567,890"
p commify("12345.6789") #=> "12,345.6789"
作者: tommay    时间: 2009-4-23 06:32
小弟今天遇上贵人了,多谢各位大大!
作者: TERENCE    时间: 2009-4-23 07:02
显示金钱的窗口
完整精简版
#==============================================================================
# ■ Window_Gold
#------------------------------------------------------------------------------
#  显示金钱的窗口。
#==============================================================================

class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    cx = contents.text_size($data_system.words.gold).width
    gold = commify($game_party.gold.to_s)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120-cx-2, 32, gold, 2)        
    self.contents.font.color = system_color
    self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
  end
  def commify(numstr)
    int ,frac = *numstr.split(".")
    int = int.gsub(/(\d)(?=\d{3}+$)/, '\\1,')
    int << "." << frac if frac
    return int
  end
end

作者: 凌辰    时间: 2009-6-12 08:00
以下引用tommay于2009-4-22 20:12:12的发言:
不过鉴于LZ的伸手行为,还是不帮你写了。
也不算伸手吧……
话说我还真不知道该怎么搞。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1