首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将截断的Python浮点数格式化为字符串中的整型

将截断的Python浮点数格式化为字符串中的整型
EN

Stack Overflow用户
提问于 2012-11-22 19:19:51
回答 4查看 37.4K关注 0票数 40

一句简单的话:

代码语言:javascript
复制
some_float = 1234.5678
print '%02d' % some_float  # 1234

some_float = 1234.5678
print '{WHAT?}'.format(some_float) # I want 1234 here too

注意:{:.0f}不是一个选项,因为它四舍五入(在本例中返回1235 )。

format(..., int(some_float))正是我想要避免的东西,请不要这样建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-22 21:49:11

可以通过扩展类string.Formatter来扩展标准字符串格式化语言

代码语言:javascript
复制
class MyFormatter(Formatter):
    def format_field(self, value, format_spec):
        if format_spec == 't':  # Truncate and render as int
            return str(int(value))
        return super(MyFormatter, self).format_field(value, format_spec)

MyFormatter().format("{0} {1:t}", "Hello", 4.567)  # returns "Hello 4"
票数 20
EN

Stack Overflow用户

发布于 2019-03-08 03:21:05

值得一提的是,关于如何使用原始格式字符串呈现浮点数的内置行为。如果您事先知道小数部分相对于0.5的位置,您可以利用最初尝试的格式字符串,但发现它不符合舍入副作用"{:0.0f}"。看看下面的例子。

代码语言:javascript
复制
>>> "{:0.0f}".format(1.999)
'2'
>>> "{:0.0f}".format(1.53)
'2'
>>> "{:0.0f}".format(1.500)
'2'
>>> "{:0.0f}".format(1.33)
'1'
>>> "{:0.0f}".format(0.501)
'1'
>>> "{:0.0f}".format(0.5)
'0'
>>> "{:0.0f}".format(0.1)
'0'
>>> "{:0.0f}".format(0.001)
'0'

正如您所看到的,在幕后有舍入行为。在我的例子中,我有一个将整数转换为浮点数的数据库,我知道我提前处理的是一个非小数部分,只想在html模板中呈现浮点数的int部分作为变通办法。当然,如果您事先不知道小数部分,则需要首先对浮点数执行某种截断操作。

票数 22
EN

Stack Overflow用户

发布于 2012-11-22 19:25:22

这是可行的:

代码语言:javascript
复制
from math import trunc
some_float = 1234.5678

print '{:d}'.format(trunc(some_float))
=> 1234

或者干脆这样做:

代码语言:javascript
复制
print trunc(some_float)
=> 1234

我认为这是一个可以接受的答案,它避免了向int的转换。请注意,在这段代码中:'%02d' % some_float正在进行到int的隐式转换,您无法避免某种类型的转换,以便以所需的格式打印。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13511612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档