【发布时间】:2015-06-03 13:20:15
【问题描述】:
我正在打印一个我不知道其值的数字。在大多数情况下,该数字是整数或尾随 0.5。在某些情况下,数字以 0.25 或 0.75 结尾,而且数字很少达到千分位。我如何专门检测最后一种情况?现在我的代码检测到一个整数(0 个小数位),正好是 0.5(1 个小数位),然后在所有其他情况下恢复到 2 个小数点,但是当它需要时我需要转到 3。
class func getFormattedNumber(number: Float) -> NSString {
var formattedNumber = NSString()
// Use the absolute value so it works even if number is negative
if (abs(number % 2) == 0) || (abs(number % 2) == 1) { // Whole number, even or odd
formattedNumber = NSString(format: "%.0f", number)
}
else if (abs(number % 2) == 0.5) || (abs(number % 2) == 1.5) {
formattedNumber = NSString(format: "%.1f", number)
}
else {
formattedNumber = NSString(format: "%.2f", number)
}
return formattedNumber
}
【问题讨论】:
-
在最后一个 else 范围内试试这个:formattedNumber = NSString(format: "%.3f", number)
-
我想实际检测这个数字是否去了 3 个地方,我不想简单地依靠那个。
-
请注意,Float 和 Double 都不能准确表示所有小数。如果用户输入 1.23,它将(大致)存储为 1.2300000190734863。你会如何展示它? – 换句话说,“小数位数”对于二进制浮点值没有精确的含义。
-
如果数字是 6.5,则代码正确地将余数与 0.5 匹配。如果系统在后面加上 0,那不是很多吗?
-
6.5 可以完全表示为浮点数。大多数小数不能。