谁能告诉我这段代码有什么问题......
def format_money_value(num):
return u'{0:.2f}'.format(num)
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
Unknown format code 'f' for object of type 'unicode'
Run Code Online (Sandbox Code Playgroud)
我正在运行Django 1.5
谢谢
Bak*_*riu 21
在你的情况下num是一个unicode字符串,它不支持f格式修饰符:
>>> '{0:.2f}'.format(u"5.0")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'f' for object of type 'unicode'
Run Code Online (Sandbox Code Playgroud)
您可以修复错误,使转换为您float自己:
>>> '{0:.2f}'.format(float(u"5.0"))
'5.00'
Run Code Online (Sandbox Code Playgroud)
正如mgilson所指出的那样'{0:.2f}'.format(num),format字符串调用的方法num.__format__(".2f").这会导致错误,str或者unicode因为他们不知道如何处理此格式说明符.请注意,其含义f保留为对象的实现.对于数字类型,它表示将数字转换为浮点字符串表示形式,但其他对象可能具有不同的约定.
如果使用%格式化运算符,则行为不同,因为在这种情况下直接%f调用__float__以获取对象的浮点表示.这意味着当使用%-style格式f 确实具有特定含义时,即转换为浮点字符串表示.
str.format方法调用 __format__()相关类型的方法.这意味着
<type>.__format__(<value>, <spec>)
Run Code Online (Sandbox Code Playgroud)
上面的方法接受与第一个值相同的类型参数,并接受合适的spec类型作为第二个.喜欢,
str.__format__('1', 's')
int.__format__(1, 'f')
float.__format__(1.00, 'f')
Run Code Online (Sandbox Code Playgroud)
str.__format__接受任何从str类型派生的类型,如str或unicode.规范值必须是可用于该类型的有效格式化程序.以下将引发错误
str.__format__('1', 'f')
ValueError: Unknown format code 'f' for object of type 'str'
Run Code Online (Sandbox Code Playgroud)
因为floating point格式化不是一个合适的格式类型fot字符串.同样,以下也会引发错误
float.__format__(1.00, 's')
ValueError: Unknown format code 's' for object of type 'float'
Run Code Online (Sandbox Code Playgroud)
因为float是一个numeric类型,不能格式化为string.但以下都是有效的:
float.__format__(1.00, 'g')
float.__format__(1.00, 'f')
Run Code Online (Sandbox Code Playgroud)
以下同样会引发异常
float.__format__(1.00, 'd')
ValueError: Unknown format code 'd' for object of type 'float'
Run Code Online (Sandbox Code Playgroud)
因为将浮点数格式化为十进制值将导致精度值丢失.但格式化int为float不会导致这样的事情,所以它是一个有效的转换:
int.__format__(1, 'f')
Run Code Online (Sandbox Code Playgroud)
所以.format()被limeted到specs这是提供给相关的格式化type.你必须解析你的价值@Bakuriu定义:
'{0:.2f}'.format(float(u"5.0"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34315 次 |
| 最近记录: |