转换数字时积分常数太大C#

转换数字时积分常数太大C#,c#,C#,我正在开发一个基本的空闲游戏(基于cookie clicker),并有一个脚本,可以使用以下代码将较大的数字转换为较小的数字: if(valueToConvert >= 1000000000000000000000) { converted = (valueToConvert/1000000000000000000000).ToString("f3") + "Sex"; 然而“积分常数”太大了,我想知道如何通过它 如果您不理解代码,它将检查用户货币是否大于sextilli

我正在开发一个基本的空闲游戏(基于cookie clicker),并有一个脚本,可以使用以下代码将较大的数字转换为较小的数字:

if(valueToConvert >= 1000000000000000000000) {
        converted = (valueToConvert/1000000000000000000000).ToString("f3") + "Sex";
然而“积分常数”太大了,我想知道如何通过它


如果您不理解代码,它将检查用户货币是否大于sextillion,如果是,请将数字1000000000000000设置为1 sextillion。

您正在编写一个整型常量,但它比最大的基元整型大约大100倍。(1E+21,与ulong.MaxValue相比,ulong.MaxValue约为1.8E+19。)

但这没问题——你在评论中提到,你的价值实际上是一个浮点数。因此,请使用浮点常量(
10000000000000000f
1e+21f
)而不是整数常量(
1000000000000000


或者,如果您真的使用double(这通常比float更好),请使用
1000000000000000000.0
1e+21

您正在编写一个整数常量,但它比最大的基本整数类型大约大100倍。(1E+21,与ulong.MaxValue相比,ulong.MaxValue约为1.8E+19。)

但这没问题——你在评论中提到,你的价值实际上是一个浮点数。因此,请使用浮点常量(
10000000000000000f
1e+21f
)而不是整数常量(
1000000000000000


或者,如果您真的使用double(这通常比float更好),请使用
1000000000000000000.0
1e+21

存储如此大的数字是毫无意义的,因为对值的解析是毫无意义的。为什么不把这个数字扩大到10亿或万亿的水平,你的最低显示量是多少

这样的函数可以将缩放的整数转换为显示的值,而无需比较大的常量。如果您的范围足够宽,以至于64位整数不够,那么您可以使用double。无论哪种方法,您都不再需要计算大的常量值

    public string ConvertValue(Int64 Value)
    {
        string[] ValueNames = { "Billion", "Trillion" ... };
        int index;

        for (index = 0; index < ValueNames.GetLength(0); index++)
        {
            Int64 NewValue = Value / 1000;
            if (NewValue == 0)
            {
                break;
            }
            else
            {
                Value = NewValue;
            }
        }

        return Value.ToString() + ValueNames[index];
    }
公共字符串值(Int64值)
{
字符串[]ValueNames={“十亿”,“万亿”…};
整数指数;
for(index=0;index
存储如此大的数字是毫无意义的,因为对值的解析是如此。为什么不把这个数字扩大到10亿或万亿的水平,你的最低显示量是多少

这样的函数可以将缩放的整数转换为显示的值,而无需比较大的常量。如果您的范围足够宽,以至于64位整数不够,那么您可以使用double。无论哪种方法,您都不再需要计算大的常量值

    public string ConvertValue(Int64 Value)
    {
        string[] ValueNames = { "Billion", "Trillion" ... };
        int index;

        for (index = 0; index < ValueNames.GetLength(0); index++)
        {
            Int64 NewValue = Value / 1000;
            if (NewValue == 0)
            {
                break;
            }
            else
            {
                Value = NewValue;
            }
        }

        return Value.ToString() + ValueNames[index];
    }
公共字符串值(Int64值)
{
字符串[]ValueNames={“十亿”,“万亿”…};
整数指数;
for(index=0;index
是什么让您对错误感到困惑?你的常数太大了。你可能想看看@maccettura,看看这个问题……“我想知道如何度过这个难关”。他知道它太大了。他想知道他是如何做到这一点的。@maccettura我理解这个错误,我不知道如何避免这个错误,所以我仍然可以将1x10^21转换成十六进制。你能在它变大之前转换一下吗?ie是几十亿还是几百万?@mattack什么类型的
valueToConvert
?是什么让你对错误感到困惑?你的常数太大了。你可能想看看@maccettura,看看这个问题……“我想知道如何度过这个难关”。他知道它太大了。他想知道他是如何做到这一点的。@maccettura我理解这个错误,我不知道如何避免这个错误,所以我仍然可以将1x10^21转换成十六进制。你能在它变大之前转换一下吗?ie是几十亿还是几百万?@mattack什么类型的
valueToConvert