C#计算小数
本文关键字:小数 计算 | 更新日期: 2023-09-27 17:58:10
我只想通过简单求和来计算价格。例如:
float HourPay = 18.30
int MinutesWorked = 125
minutesWorked ' 60 * HourPay = 38,124999999
我在C#函数中得到了这些值,遇到了两个问题:
private decimal CalculatePrice(int minutes)
{
float test = minutes / 60 * setting.HourPay
return;
}
问题是,test
返回36.6,这是不正确的,并且四舍五入到小数点后1位。
我想要一个正确的答案,把它解析成一个小数,四舍五入到2个小数。
minutesWorked
是整数,60
也是整数。所以minutesWorked / 60
->125 / 60
->2
,而不是你所期望的(2.083333
)。
如果你把它改成
float test = minutes / 60.0 * setting.HourPay;
它应该如你所期望的那样工作。
我应该补充一点,这让我有点尴尬,你用浮动工资作为小时工资。由于这基本上是货币(从技术上讲是$/hr),小数可能是更好的选择,特别是因为您在稍后的过程中(由于您的函数)要移动到小数。
问题是,您从划分两个整数开始,这会产生另一个整数:
float test = minutes / 60;
注意,test
得到的是2
,因为如果两个整数被除,则所有小数都被截断。所以计算实际上是正确的:
2*18.3=36.6
test
应该是2.083...
。解决方案是先将整数强制转换为浮点:
private decimal CalculatePrice(int minutes)
{
float test = (float)minutes / 60.0f * setting.HourPay;
return;
}
那么你的除法不会忽略小数,结果就是你所表达的。您也可以省略minutes
:的显式强制转换
float test = minutes / 60.0f * setting.HourPay;
只要常数(60.0f
)被标记为浮点,这是有效的,因为被浮点除的整数被隐含地强制转换为整数。然而,第一种方法可能更容易阅读。
我希望这会有所帮助。
int minutesWorked = 125;
float hourPay = 18.30F;
float item = (minutesWorked / 60.0F) * hourPay;
根据您的代码,当minutesWorked被60(这是整数)除时,它会以整数给出答案,因此返回2。
当你做60.0时,它会以浮动形式返回答案,然后乘以小时工资。
只需尝试:
float test = minutes / 60.0 * setting.HourPay