【发布时间】:2020-10-11 15:54:52
【问题描述】:
我有一个 BigInteger 成本 = 111111222222333333444444555555 和一个浮点 costMultiply 1.1f。
我尝试:
newCost = cost * costMultiply
并得到一个“无法应用运算符“*””- 错误。
我也试过了:
int multiplierBuffer = (int)(costMultiply * 10);
cost = cost * (multiplierBuffer / 10);
这不会引发错误,但会返回初始成本值(不乘以 1.1f)。
如何将我的 BigInteger 乘以浮点数?
【问题讨论】:
-
乘以11除以10
-
costMultiply 是一个不总是 1.1f 的变量。它最终可能有不同的小数,所以我需要一个使用浮点变量而不是硬编码值的解决方案。
-
你希望结果是什么类型的?你在那里有 30 位的精度。你都需要它们吗?如果是这样,你就会被 BigInteger 困住(浮点数给你 6-9 位,双倍 15-17 和小数 28-29,docs.microsoft.com/en-us/dotnet/csharp/language-reference/…)。编写一些代码,将浮点数转换为乘以 10 的幂和除以 10 的幂(提示,使用对数),然后这样做。
-
我希望结果是另一个 BigInteger。在我的程序中,任何 BigInteger 都不会超过 30 位。 “将浮点数转换为乘法和除法”是什么意思?
-
如果乘数是,例如,
2.25f,找出小数点后有两位数(最简单的方法可能是有一个循环,在每次迭代中,乘以 10 和检查以确保该数字在四舍五入为 int 时足够接近)。在您的情况下,22.5 并不接近 22,但 225 有效)。所以你的乘数是 225,除数是 100。我会把它写出来并回答,但我在手机上
标签: c# unity3d biginteger bigint