代码之家  ›  专栏  ›  技术社区  ›  Arman

无法将字符串显式转换为浮点

  •  -4
  • Arman  · 技术社区  · 7 年前

    在我的Unity游戏中,我使用以下代码格式化货币。但是有一些错误消息说“不能显式地将字符串转换为float”

        public float FormatAmount(float amount)
        {
            if (amount <= 999) {
                return amount;
            }
            // Thousands 106
            else if (amount >= 1000 && amount <= 999999) {
                return (amount / 1000 + "K");
            }
            // Millions 106
            else if (amount >= 1000000 && amount <= 999999999) {
                return (amount / 1000000 + "M");
            }
    
            // Billions 109
            else if (amount >= 1000000000 && amount <= 999999999999) {
                return (amount / 1000000000 + "B");
            }
    
            // Trillions 1012
            else if (amount >= 1000000000000 && amount <= 999999999999999) {
                return (amount / 1000000000000 + "T");
            }
    
            // Quadrillions 1015
            else if (amount >= 1000000000000000 && amount <= 999999999999999999) {
                return (amount / 1000000000000000 + "Quad");
            }
            // Quintillions 1018
            else if (amount >= 1000000000000000000 && amount <= 999999999999999999) {
                return (amount / 1000000000000000000 + "Quin");
            } else {
                return amount;
            }
        }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Alex.T    7 年前

    您提供的代码有几个问题。 方法签名声明为具有浮点输出:

    公众的 浮动 格式金额( 浮动 金额)

    这个 浮动 是输出,定义为浮点。第二个 浮动 是一个输入,它需要一个float(如果在提供float的同时调用函数,这个就可以了)

    但是,在你的回报中

    1. 退货金额 -它会通过一个浮点数。
    2. 收益(金额/1000+“K”); -它会传递一个字符串。

    这里有两种可能性。

    1. 如果需要一个浮点作为函数的输出,则需要 只有 返回浮点数。这意味着你将不会有+的“字母”。
    2. 如果要保留字母并返回字符串,则需要确保只传递字符串。这意味着你可以 收益(金额/1000+“K”); ,但您还需要将.toString()添加到只有浮点数的返回中。 最后会是这样的:
    public string FormatAmount(float amount)
        {
            if (amount <= 999) {
                return amount.toString();
            }
            else if (amount >= 1000 && amount <= 999999) {
                return (amount / 1000 + "K");
            }
        }
    

    您可能还需要考虑paulf关于float的限制的评论,以及draco18使用外部数字库处理如此大的值的解决方案。

        2
  •  0
  •   Leandro Sousa    7 年前

    这是正确的,您连接一个字符串,然后您的函数返回float。 更改返回方法类型。