Python中如何让浮点数保留两位小数输出满足价格场景断言要求
Counter类需求实现方案
现存问题
当前代码存在3个和需求不符的点:
get_total方法未实现注释标注的「四舍五入保留两位小数」逻辑,直接返回了原始计算值status方法拼接字符串时,没有对总金额做强制两位小数的格式化处理,导致9.0仅显示为9.0status方法仅打印了结果字符串,没有return返回值,断言调用时会直接取到None,无法通过校验
修改后的完整代码
class Counter: id : str _items: dict def __init__(self, ID: str): '''创建一个指定ID的新计数器''' self.id = ID self._items={} # 字典结构为dict[str, list[int, float]] def add(self, item_name: str, amount: int, price_of_unit: float)-> None: '''添加指定数量的对应名称商品,传入商品单价,可假定同一商品名的每次添加单价一致''' if item_name not in self._items: self._items[item_name]=[amount,price_of_unit] else: self._items[item_name][0]=self._items[item_name][0]+amount def remove(self, item_name: str, amount: int)->None: '''移除指定数量的对应名称商品''' self._items[item_name][0]=self._items[item_name][0]-amount def reset(self): '''清空此前添加的所有商品记录''' self._items={} def get_total(self)-> float: '''返回总金额,四舍五入保留小数点后两位''' total_sum=0.0 for x in self._items: total_sum += self._items[x][0]*self._items[x][1] # 新增四舍五入逻辑 return round(total_sum, 2) def status(self)-> str: '''返回格式为「Id N M」的字符串,其中Id是计数器ID,N是所有商品总数量,M是总价格保留两位小数且强制显示两位小数''' total_items=0 for x in self._items: total_items += self._items[x][0] # 修改格式化规则,强制两位小数,且返回字符串而非仅打印 my_string = f"{self.id} {total_items} {self.get_total():.2f}" return my_string
关键修改说明
- 浮点数格式化符
:.2f会强制保留两位小数,即使小数位为0也会补0,完全匹配价格字段的显示要求 - 给
get_total方法新增round(total_sum,2)逻辑,符合注释标注的四舍五入要求 - 调整
status方法逻辑,改为直接返回格式化后的字符串(如果需要打印可在调用status后自行打印),满足断言的取值要求
效果验证
执行测试用例:
mycounter = Counter("C001") mycounter.add("Spaghetti", 5, 1.8) # 输出 C001 5 9.00 print(mycounter.status()) # 断言通过 assert mycounter.status()=="C001 5 9.00"
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

