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个小数。

C#计算小数

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