我正在尝试将基于时间(小时和分钟)的字符串转换为人偶中的整数。 除分钟数少于10(例如08)外,大多数时间都可以正常工作。对于这些值,它会引发异常。
Error: Evaluation Error: The value '08' cannot be converted to Numeric.
使用的代码
$minute_string = Timestamp.new.strftime("%M") #Tried the following and it did not work #$minute_integer = $minute_string + 0 #Subsequently, attempted the following but it did not work either $minute_integer = Integer($minute_string)
答案 0 :(得分:4)
这看起来像问题PUP-6010。由于“不会做”而被关闭,但是这些评论提供了解释和解决方法。
简而言之,Puppet使用完全相同的规则将数字字符串转换为用于转换数字文字的数字,其中包括前导0x
指示解释为十六进制,否则前导{{1} }将解释指示为八进制。其他一些语言(例如Ruby和C)具有相同的约定。但是'8'和'9'不是有效的八进制数字,因此字符串0
和'08'
不能由算术运算符或'09'
构造函数直接转换为整数。
推荐的解决方案是使用Integer()
函数来转换字符串:
scanf
采用这种格式时,所有数字都将被解释为十进制,并且前导零没有特殊意义。该函数返回一个数组,其中$minute_integer = $minute_string.scanf('%d')[0]
当然会选择索引0处的元素。
答案 1 :(得分:2)
一种解决方法是添加-,它不会不用零填充。但是要检查一下约翰的解决方案是否行得通。
$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")
接受约翰的回答