C# 数学
C# Mathemathics
我想问一个关于我今天在 C# 中进行的计算的问题。
double expenses = (pricePen + priceMark + priceLitres) - discount / 100*(pricePen + priceMark + priceLitres); //Incorrect
double expenses = (pricePen + priceMark + priceLitres) - (pricePen + priceMark + priceLitres)* discount/100; //Correct
因此,正如您在等式末尾看到的那样,我不得不将方括号乘以名为“discount”的整数,这显然是折扣百分比。
当我更改该值的位置时,无论它是在括号前还是在括号后,答案总是不同的,但在数学中我什至检查过自己,我应该得到相同的答案,即使value放在括号前面乘还是放在括号后面再乘,但是C#不这么认为
我想问问大家,C# 是如何计算的,为什么我最后会得到不同的结果? (结果应该是 28.5,不是 38)
[Data: pricePen = 11.6; priceMark = 21.6; priceLitres = 4.8; discount = 25;]
(我知道这个问题无关紧要。)
第一行除以 100 后的结果是一个整数。为此,其余部门迷路了。所以乘法的结果较低。
在第二行乘法有正确的结果,除法的其余部分小于一。
要避免这些问题,请确保您使用浮点类型而不是 int
类型进行数学运算。在你的情况下 discount
是一个 int
因此
x * (discount / 100) = x * <integer>
最好定义一个函数来进行强制类型的计算
double DiscountedPrice(double price, double discount)
{
return price - (discount/100) * price;
}
然后称其为
var x = DiscountedPrice( pricePen + priceMark + priceLitres, 15);
在上述场景中,编译器会强制将整数 15
转换为双精度作为 加宽 转换(双精度的位数多于整数)。
所以我知道它已经回答了,但是如果你想了解更多关于 int 的除法
这里是:
例如:
float value = 3/4
你会期望它是 0.75 但事实并非如此。
因为当编译器遍历值 3 和 4 时,他会生成最高数据类型的 des Literal - 在本例中为 (int)-。
这意味着该除法的结果将是 "0".75 因为 int 没有浮点数,只是将其截断。然后程序只获取该值并将其放入 float value
...
所以结果将是
"3/4" 0 ->"浮点值" 0.0 = 0.0
我之前的一些人已经告诉过你解决这个问题的方法,比如让一个除数随 .0 浮动
float value = 3.0/4
或者您可以使用 (float) "command"
告诉编译器将值存储在浮点文字中
float value = (float) 3/4
我希望它能帮助你解释你为什么这样做:)
我想问一个关于我今天在 C# 中进行的计算的问题。
double expenses = (pricePen + priceMark + priceLitres) - discount / 100*(pricePen + priceMark + priceLitres); //Incorrect
double expenses = (pricePen + priceMark + priceLitres) - (pricePen + priceMark + priceLitres)* discount/100; //Correct
因此,正如您在等式末尾看到的那样,我不得不将方括号乘以名为“discount”的整数,这显然是折扣百分比。
当我更改该值的位置时,无论它是在括号前还是在括号后,答案总是不同的,但在数学中我什至检查过自己,我应该得到相同的答案,即使value放在括号前面乘还是放在括号后面再乘,但是C#不这么认为
我想问问大家,C# 是如何计算的,为什么我最后会得到不同的结果? (结果应该是 28.5,不是 38)
[Data: pricePen = 11.6; priceMark = 21.6; priceLitres = 4.8; discount = 25;]
(我知道这个问题无关紧要。)
第一行除以 100 后的结果是一个整数。为此,其余部门迷路了。所以乘法的结果较低。
在第二行乘法有正确的结果,除法的其余部分小于一。
要避免这些问题,请确保您使用浮点类型而不是 int
类型进行数学运算。在你的情况下 discount
是一个 int
因此
x * (discount / 100) = x * <integer>
最好定义一个函数来进行强制类型的计算
double DiscountedPrice(double price, double discount)
{
return price - (discount/100) * price;
}
然后称其为
var x = DiscountedPrice( pricePen + priceMark + priceLitres, 15);
在上述场景中,编译器会强制将整数 15
转换为双精度作为 加宽 转换(双精度的位数多于整数)。
所以我知道它已经回答了,但是如果你想了解更多关于 int 的除法 这里是:
例如:
float value = 3/4
你会期望它是 0.75 但事实并非如此。
因为当编译器遍历值 3 和 4 时,他会生成最高数据类型的 des Literal - 在本例中为 (int)-。
这意味着该除法的结果将是 "0".75 因为 int 没有浮点数,只是将其截断。然后程序只获取该值并将其放入 float value
...
所以结果将是
"3/4" 0 ->"浮点值" 0.0 = 0.0
我之前的一些人已经告诉过你解决这个问题的方法,比如让一个除数随 .0 浮动
float value = 3.0/4
或者您可以使用 (float) "command"
告诉编译器将值存储在浮点文字中float value = (float) 3/4
我希望它能帮助你解释你为什么这样做:)