将 Biginteger 值乘以 double 值
Multiply a Biginteger value by a double value
我想像这样将 Biginteger 乘以 double
buyableObjects[index - 1].cost = buyableObjects[index - 1].cost * BigInteger.Pow((BigInteger)multiplier, buyableObjects[index - 1].indexMultiplier);
问题是 multiplier 是一个等于 1.15 的双精度值,而 BigInteger 忽略了 0.15。有没有办法将我的对象的成本(也是一个 Biginteger 值)乘以 double 值 1.15 并将其四舍五入为一个 biginteger?
您可以乘以 115,然后除以 100。
我们可以看到 here BigInteger.Pow() 接受一个 BigInteger 后跟一个常规的 Base 32 整数。因此,如果您只想使用双精度数,我不明白您为什么要使用 BigInteger.Pow() 函数。
因为我们知道 multiplier 是一个双精度值,而 buyableObjects[index-1].indexMultiplier 是一个整数,
我会做
double finalMultiplier = Math.Pow(multiplier, buyableObjects[index-1].indexMultiplier);
那么你只需要面对将你的 BigInteger 乘以一个双精度数的问题,你可以通过将它分解成乘法和除法来解决这个问题。
比如说 finalMultiplier = 2.27;此时您可能需要进行一些舍入,因为我们不确定 finalMultiplier 的小数位数。您可以使用 Math.Round() 函数实现此目的。
例如:
int decimalPlaces = 2;
double finalMultiplier = 2.225f;
finalMultiplier = Math.Round(finalMultiplier,decimalPlaces, MidpointRounding.ToEven);
//Will round 2.225 to 2.22
BigInteger cost = new BigInteger(500);
cost *= ((BigInteger) (finalMultiplier * Math.Pow(10, decimalPlaces))); //Multiply by 222
cost /= (BigInteger) (Math.Pow(10,decimalPlaces)); //Divide by 100
print(cost); //1110
Here 关于 C# 中不同舍入模式的一些信息。这样做将帮助您指定希望如何进行舍入,并且我已经向您展示了如何实现其他人所说的关于分解小数的一些内容。我会让你自由地替换正确的变量,但希望这会有所帮助!您所要做的就是用您的 BigInteger 替换成本并使用我在那里提供的 finalMultiplier。您可以根据需要自定义 decimalPlaces。
我想像这样将 Biginteger 乘以 double
buyableObjects[index - 1].cost = buyableObjects[index - 1].cost * BigInteger.Pow((BigInteger)multiplier, buyableObjects[index - 1].indexMultiplier);
问题是 multiplier 是一个等于 1.15 的双精度值,而 BigInteger 忽略了 0.15。有没有办法将我的对象的成本(也是一个 Biginteger 值)乘以 double 值 1.15 并将其四舍五入为一个 biginteger?
您可以乘以 115,然后除以 100。
我们可以看到 here BigInteger.Pow() 接受一个 BigInteger 后跟一个常规的 Base 32 整数。因此,如果您只想使用双精度数,我不明白您为什么要使用 BigInteger.Pow() 函数。
因为我们知道 multiplier 是一个双精度值,而 buyableObjects[index-1].indexMultiplier 是一个整数, 我会做
double finalMultiplier = Math.Pow(multiplier, buyableObjects[index-1].indexMultiplier);
那么你只需要面对将你的 BigInteger 乘以一个双精度数的问题,你可以通过将它分解成乘法和除法来解决这个问题。
比如说 finalMultiplier = 2.27;此时您可能需要进行一些舍入,因为我们不确定 finalMultiplier 的小数位数。您可以使用 Math.Round() 函数实现此目的。 例如:
int decimalPlaces = 2;
double finalMultiplier = 2.225f;
finalMultiplier = Math.Round(finalMultiplier,decimalPlaces, MidpointRounding.ToEven);
//Will round 2.225 to 2.22
BigInteger cost = new BigInteger(500);
cost *= ((BigInteger) (finalMultiplier * Math.Pow(10, decimalPlaces))); //Multiply by 222
cost /= (BigInteger) (Math.Pow(10,decimalPlaces)); //Divide by 100
print(cost); //1110
Here 关于 C# 中不同舍入模式的一些信息。这样做将帮助您指定希望如何进行舍入,并且我已经向您展示了如何实现其他人所说的关于分解小数的一些内容。我会让你自由地替换正确的变量,但希望这会有所帮助!您所要做的就是用您的 BigInteger 替换成本并使用我在那里提供的 finalMultiplier。您可以根据需要自定义 decimalPlaces。