为什么将多个数字相乘的结果与计算器中相乘的结果不同?

时间:2020-11-02 06:47:18

标签: c#

有一些浮点数和整数,我必须将它们相乘。

float length = 40;
float width = 25.7f;
float height = 27.6f;
int count = 361;
var result = length * width * height * count;

此代码的输出等于 10242826

当我使用计算器时,输出为: 10242580.8

为什么几个数相乘的结果与计算器中的相乘结果为什么不同?

enter image description here

3 个答案:

答案 0 :(得分:2)

差异仅由代码中使用的浮点数引起。
它们的精度较低。

要修复代码,只需将其替换为双精度字:

double length = 40;
double width = 25.7d; // <-Remofe "f" IMPORTANT! or use "d" instead (e.g.: 25.7d)
double height = 27.6d; // <-Remofe "f" IMPORTANT! or use "d" instead (e.g. 27.6d)
int count = 361;
var result = length * width * height * count;

这将产生与计算器相同的结果:

10242580.8

P.S。您也可以使用这样的简化版本:

var length = 40;
var width = 25.7; // No need of "d", as the type is automatically set to double
var height = 27.6; // No need of "d", as the type is automatically set to double
var count = 361;
var result = length * width * height * count;

答案 1 :(得分:1)

要为@Just Shadow的出色答案添加其他方法,您还可以使用其他度量单位,避免使用浮点数或双精度数:

如果您有25.7米,可以将其表示为2570厘米,这是整数。

在处理货币时,有时会使用这种技术,因此,将美元表示为1.25,而不是将其表示为1.25,就可以得到一切

只要知道所需的精度水平,就可以进行这些转换并摆脱有问题且昂贵的浮点算法。

答案 2 :(得分:1)

appRoleIdGet https://graph.microsoft.com/v1.0/servicePrincipals/{your resourceId} 内部表示float中的数字。 double中可表示的数字精确表示为浮点数和双精度数。因此,大多数带有分数成分的文字(以10为底)将无法精确表示。

但是在这种情况下,您可以使用小数获取精确值,因为实数以10为底,所以小数可以精确表示25.7之类的数字。

相关问题