首页 > 解决方案 > 显示时大双打变成负数的问题

问题描述

我正在尝试在联合国中制作答题器游戏。目前我正在使用双打作为显示大数字的一种方式。但是,当我得到任何超过一万亿的数字时,它会变为 -1354 万亿或类似的数字。下面显示的代码是将大数字填写为“___ 百万”或“____ 亿”的代码,但一旦超过 9990 亿,则显示“-1354 万亿”。它继续表现得像一万亿美元,因为你可以用明显的负值购买物品,但显示都是错误的。

我尝试将 double 更改为 int、long 和 float,所有这些都会导致相同的问题。我也尝试过更大的数字,但它们甚至在系统中都不起作用。似乎 9990 亿是在它彻底松动之前的极限。

public static string largeWholeNumbers(double number)
{
    int numOfZeros = (number.ToString()).Length; //Gets Length of number
    int zeroSets = (int)Mathf.Floor(numOfZeros / 3.001f); //Divides it by a little over 3 and floors it 
    double numDisplay = number/(power(10, ((2 *zeroSets) + (zeroSets - 1)))); //Get the thing infront of the illion (IE 134, 6 million)

    //Defines
    string numberName = "";
    int hugeNumberSet = 0;
    int hugeNumberStart = 0;
    int hugeNumberStartIndex = 0;
    int hugeNumberEnd = 0;

    if (zeroSets < 11)
    {
        zeroSets -= 2;
        numberName = numberEndings.wholeNumEndings[zeroSets];
    }

    if (zeroSets > 10)
    {
        hugeNumberSet = (int)Mathf.Floor((zeroSets - 1)/10); //Divides it by 10 to get 10, 20, 30 etc
        hugeNumberEnd = hugeNumberSet - 1;
        hugeNumberStart = zeroSets - (hugeNumberSet * 10); //Example zeroSet = 12, this = 2
        hugeNumberStartIndex = hugeNumberStart - 1; 
        if (hugeNumberStart < 1)
        {
            numberName = numberEndings.endNumEndings[hugeNumberEnd];
        }

        if (hugeNumberStart >= 1)
        {
            numberName = numberEndings.endNumEndings[hugeNumberEnd] + numberEndings.beginNumEndings[hugeNumberStartIndex];
        }
    }

    return numDisplay.ToString() + " " + numberName;
}

预期的结果是将界面中的数字显示为“1 万亿”,但它显示为“-1354 万亿”。

标签: c#unity3d

解决方案


推荐阅读