在Swift中将十进制小数取整为双精度浮点数(算法)

3

我正在尝试实现几个数字建议,但是我找不到如何实现的算法。

我正在开发一个销售应用程序,显示所选商品的总价,根据总价会有3个总金额建议。这3个总金额是从所选商品的总价四舍五入得出的。

因此,用户可以选择其中一个建议金额,以获得更好的用户体验。

在我的国家有5种纸币:

$1, $5, $10, $20, $50, $100

例如。
Total Price: 307.40
First suggestion: 308.00
Second suggestion: 310.00
Third suggestion: 350.00

Total Price: 14.54
First suggestion: 15.00
Second suggestion: 20.00
Third suggestion: 50.00

Total Price: 131.82
First suggestion: 132.00
Second suggestion: 140.00
Third suggestion: 150.00

基本上,建议的金额必须基于银行票据。上面的例子只是为了描述测试用例,不一定与上述完全相同。

有人可以指导我如何实现这样的功能吗?

谢谢!非常感激任何给予的帮助。


那么你的问题是如何将数字四舍五入到下一个整数或下一个10或50的倍数? - Martin R
有点含糊不清...具体问题是什么? - Ahmad F
@AhmadF 更新了问题。现在有意义了吗? - Alvin
@MartinR 第一个建议是将数字四舍五入到下一个整数,对于第二个和第三个建议,它们可以是10或50的倍数。 - Alvin
1个回答

6

浮点数将被四舍五入为下一个整数值:

let price = 307.40;
let integralPrice = price.rounded(.up)    // 308.00

将数值四舍五入至5、10、50的倍数等,可以通过缩放来实现,例如:
let multipleOfTen   = (price / 10).rounded(.up) * 10    // 310
let multipleOfFifty = (price / 50).rounded(.up) * 50    // 350

对于不同于给定价格且彼此不同的倍数:

let price = 109.0;
let integralPrice = price.nextUp.rounded(.up)   // 110
let multipleOfTen   = (integralPrice.nextUp / 10).rounded(.up) * 10   // 120
let multipleOfFifty = (multipleOfTen.nextUp / 50).rounded(.up) * 50   // 150

这里使用nextUp函数,将浮点数增加“一个微小的量”。


先生,您真是救命恩人!非常感谢您! - Alvin
先生,如果总价可以被“缩放”数字整除呢?它不会给出任何其他建议。对此有什么想法吗?例如,总价是100、200或2000。它将给出3个相同的建议数字作为总价。 - Alvin
@Alvin:所以对于price=100,您想要101、110、150吗? - Martin R
@Alvin:如果price=109,预期输出是什么? - Martin R
先生,您有没有将其与之前的答案结合的想法?对于109,第一个建议应该从110开始。 - Alvin
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接