【问题标题】:How do you replace all of the digits with 0 AFTER the first digit?如何在第一个数字之后用 0 替换所有数字?
【发布时间】:2018-07-20 22:27:22
【问题描述】:

关闭

我正在尝试将数字转换为熟悉的格式,例如,1000 会变成 1k 等等。我希望它上升到我已经尝试完成的 qn 区域,而我遇到的问题是当我尝试将数字四舍五入到最接近的第一位数字时。

例如,59127327 可以变成 60000000,我可以 tostringgsub 该值60M

所以我实际上正在寻找的是一种算法,可以将所有数字 AFTER 第一个数字更改为 0,同时保持整数的位数。

示例: 100000 -> 100k

我正在开发一款 roblox 游戏,资金必须转换为我上面提到的熟悉的格式。谢谢!

【问题讨论】:

  • 您真的需要基于字符串的解决方案吗?对于第一部分,math.pow(10,math.floor(math.log10(number))) 之类的东西可以工作,对数也可以用来解决第二部分。问题,问题的第二部分应该如何表示 1582? 1K 还是 1582 还是 1.582K ?
  • 我不需要基于字符串的解决方案,我应该说我对字符串解决方案很好。非常感谢,我会尝试解决方案,它必须像 1953 到 1.9k
  • 如果它以您想要的方式工作,后代自己发布选择的解决方案会很有趣,并接受答案如果没有更好的答案,比如说两个天 - 这就是 SO 的工作方式。我宁愿不自己发布它,因为我对 Lua 的了解不足以产生一个惯用的解决方案。
  • 我明白了,谢谢你,因为你的解决方案给了我更多的想法。希望我可以自己解决这个问题,但任何其他贡献者也可以帮助我解决这个问题。
  • 顺便说一句,您所做的最后一次编辑有影响:math.floor 应该变成math.round。但是以对数工作的 oldskool 是要走的路 :) 祝你好运!

标签: design-patterns lua integer digits roblox


【解决方案1】:

因此,如果理解正确,您只需要一个有效数字,后跟最多两个零,因此您有 1-3 位数字和一个数量级,您将转换为一个字符以在最后显示。

首先,在@fvu​​ 的评论中,您可以使用math.log10 来获取数字中的位数作为整数部分,分数将是0 到10 之间的距离。您可以使用“math.modf”来分隔这些部分。在 lua 中:

local int, frac = math.modf(math.log10(value))
-- 7, 0.77178824606507 for 59127327

数量级是你有多少,所以将 int 部分除以 3。它的 mod 将是额外的零。 7 位数字的示例的大小为 2 (1,000,000) 和 1 个额外的零 (7-2*3):

local magnitude = math.floor(int / 3)
local zeroes = int - magnitude * 3

现在将 10 提高到小数部分的幂将得到你的数字。如果要舍入而不是截断(样本应该是 60m,对吗?),请在铺平之前添加 0.5,然后添加额外的零:

local digit = math.floor(math.pow(10, frac) + 0.5)
local num = digit * math.pow(10, zeroes)

如果您想让所有显示的数字都有效(即“59m”而不是“60m”),您可以在取 10 的幂之前将 zeroes 添加到 frac

local num = math.floor(math.pow(10, frac + zeroes) + 0.5)

接下来使用幅度来获取一个字符串(如果未指定,则默认为指数符号):

local powers = {[0]='', 'k', 'm', 'b', 't'}
local magnitudeString = powers[magnitude]
magnitudeString = magnitudeString or 'e'..tostring(magnitude)

并结合nummagnitudeString 得到结果:

local result = tostring(num)..magnitudeString

codepad link, Here's a link 到一个带有函数的键盘,该函数可以选择您想要的转换类型以及是否舍入。

【讨论】:

    【解决方案2】:

    我无法 100% 使其与我的脚本兼容,但因为我找到了一个可靠的解决方案,我只需要在每 3 位数字之间添加一个字符,例如 我成功了。

    所以从技术上讲,我不需要更多答案,谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多