C#/Unity:BigInteger乘以Float

C#/Unity:BigInteger乘以Float,c#,unity3d,biginteger,bigint,C#,Unity3d,Biginteger,Bigint,我有一个BigInteger成本=111111 22222 333 444444 555555和一个浮点成本乘以1.1f 我尝试: newCost = cost * costMultiply 并获取一个“运算符”*“无法应用”-错误 我还尝试: int multiplierBuffer = (int)(costMultiply * 10); cost = cost * (multiplierBuffer / 10); 这不会引发错误,但会返回初始成本值(不乘以1.1f) 如何将我的BigIn

我有一个BigInteger成本=111111 22222 333 444444 555555和一个浮点成本乘以1.1f

我尝试:

newCost = cost * costMultiply
并获取一个“运算符”*“无法应用”-错误

我还尝试:

int multiplierBuffer = (int)(costMultiply * 10);
cost = cost * (multiplierBuffer / 10);
这不会引发错误,但会返回初始成本值(不乘以1.1f)


如何将我的BigInteger与浮点相乘?

您必须将BigInteger转换为double/double

    BigInteger cost = new BigInteger(10000000000000000000);
    float costMultiply = 1.1f;
    double dCost = (double) cost;
    double result = dCost * costMultiply;
    // And since you want a BigInteger at the end
    BigInteger bigIntResult = new BigInteger(result);
result
的实际类型将是
Double
,因为整数不能放入
Double
中。C#会帮你处理的

这显然可以简化

    BigInteger cost = new BigInteger(10000000000000000000);
    float costMultiply = 1.1f;
    BigInteger bigIntResult = new BigInteger((double) cost * costMultiply);

问题是,由于数据类型的精度水平不同,您的数学将变得非常糟糕。如果你需要精确性,我不会使用这种方法。但是,由于您希望将一个整数乘以一个浮点数并得到一个整数结果,因此我想您不会被精度问题所困扰。

乘以11除以10costMultiply是一个不总是1.1f的变量。它最终可能会有不同的小数,所以我需要一个使用浮点变量而不是硬编码值的解决方案。您希望结果是什么类型的?这里有30位精度。你都需要吗?如果是这样的话,您就只能使用BigInteger了(浮点数为6-9位,双精度为15-17位,小数位数为28-29位)。写一些代码,将一个浮点数转换为10的乘除(提示,使用对数),然后这样做。我希望结果是另一个大整数。在我的程序中,任何BigInteger都不会大于30位。“将浮点转换为乘除”是什么意思?如果乘法器是,例如,
2.25f
,请找出小数点后有两位数字(最简单的方法可能是在每次迭代时使用循环,乘以10,并检查确保整数舍入到整数时足够接近)。在您的例子中,22.5不接近22,但225起作用)。所以乘数是225,除数是100。我会写下来回答,但我在打电话