轨道
/
Swift
Swift
/
练习
/
自由职业者费率
自由职业者费率

自由职业者费率

学习练习

简介

数字

Swift 提供两大类数字:整数和浮点数。

  • 整数表示没有小数部分的整数,例如0、1、-1、42和-273。
  • 浮点数表示带小数部分的数字,例如0.0、3.14和-1.36969e-10。

你可以往数字字面量里插入下划线来提高可读性:1_000_000与1000000完全相同。 浮点字面量可以用十进制或指数记法书写。

大多数情况下,整数用Int,浮点数用Double:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

算术运算符

Swift 提供标准的算术运算符用于数字计算:

运算符 说明 示例
+ 加法 4 + 6的结果是10
- 减法 15 - 10的结果是5
* 乘法 2 * 3的结果是6
Caution

Swift 是类型安全的,不允许在算术运算中混用不同的数字类型。 你不能直接把Int和Double相加或相乘,必须先把其中一个类型转换成与另一个匹配的类型。

除法

/运算符执行除法。 当两个操作数都是整数时,整数除法会截断小数部分:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

非零浮点数除以零会得到inf或-inf。 0.0除以0.0会得到nan(非数字)。 相比之下,整数除以零会导致编译时或运行时错误:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

求余运算符

求余运算符(%)用来计算两个整数相除后剩下的余数:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

在 Swift 中,%是真正的求余运算符,而不是求模运算符。 结果始终取第一个操作数(被除数)的符号,与第二个操作数的符号无关:

5 % -2  // 1
-5 % 2  // -1

浮点数取整

你可以用rounded()方法对浮点数取整。 默认情况下,rounded()取最接近的整数。 你也可以指定具体的取整规则,例如.up或.down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

类型推断

声明数字常量或变量时如果不写类型标注,Swift 会推断它的类型:

  • 整数默认为Int。
  • 带小数点的数字默认为Double。
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

类型转换

要在不同类型的值之间进行运算,可以用Double(_:)或Int(_:)这样的类型初始化器转换其中一个值:

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

说明

在本练习中,你将编写代码,帮助一位自由职业者就某些项目的价格与客户沟通。你将编写几个实用函数,用来快速计算客户的费用。

1. 根据时薪计算日薪

一位客户联系这位自由职业者,想询问报价。 自由职业者解释说,他们**每天工作 8 小时。** 不过,这位自由职业者只知道这个项目的时薪。 请帮助他们根据时薪估算出日薪。

实现函数dailyRateFrom(hourlyRate:),它接收实参hourlyRate,其中保存着这位自由职业者的时薪。
该函数应返回根据时薪计算出的日薪。

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

返回的日薪应该是Double类型。

2. 根据时薪和折扣计算月薪

有时,客户想更长期地雇佣这位自由职业者。 自由职业者愿意给客户折扣,但前提是客户至少雇佣他们一个月。 总共有**22 个工作日**。 请根据时薪,以及他们愿意在标准价基础上给出的折扣百分比,帮助这位自由职业者计算月薪,并四舍五入到最接近的整数。

实现函数monthlyRateFrom(hourlyRate:withDiscount:),它接收实参hourlyRate(保存自由职业者的时薪)和withDiscount(保存自由职业者愿意给客户的折扣)。 该函数应返回四舍五入到最接近整数的月薪。

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

3. 根据预算、时薪和折扣计算工作日数量

又有一天,一位项目经理提出让这位自由职业者参与一个预算固定的项目。 给定固定预算和这位自由职业者的时薪,请帮助他们计算在预算用完之前可以工作多少天。 请注意,在这种情况下,无论雇佣多少天,这位自由职业者都愿意给出折扣。 结果_必须_向下取整到最接近的整数。

实现函数workdaysIn(budget:hourlyRate:withDiscount:),它接收以下实参:

  • budget,保存项目的预算。
  • hourlyRate,保存自由职业者的时薪。
  • withDiscount,保存自由职业者愿意给客户的折扣。

该函数应返回这位自由职业者在这个项目上工作的天数,向下取整。

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Swift Exercism

准备好开始 自由职业者费率 了吗?

注册 Exercism,借助 35 个概念116 个练习 和真人导师指导,学习并掌握 Swift,全部免费。