【问题标题】:The convertion result in 2 decimal and a comma between the integer转换结果为 2 位小数和整数之间的逗号
【发布时间】:2022-08-17 18:10:41
【问题描述】:

我创建了一个货币应用程序,用户可以在其中键入本国的价值,并从本国货币到外币进行选择。

from kivy.core.text import LabelBase
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.core.window import Window
from kivymd.uix.floatlayout import MDFloatLayout
from kivy.uix.button import Button
from kivymd.uix.menu import MDDropdownMenu
from kivy.metrics import dp  
from decimal import *
from forex_python.converter import CurrencyRates

Window.size=(400, 500)

class DropdownButton(MDFloatLayout, Button):
    pass

class CurrencyConvertor(MDApp):
    
    try:
        c = CurrencyRates()
        rates = c.get_rates(\'USD\')  
        print(rates)
    except:
        print(\'Connection Error!\') 
  
##################################################
   
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_string(kv)
        
##################################################
#################### to items #################### 
        c = CurrencyRates()       
        to_items = [
            {
                \"viewclass\": \"OneLineListItem\",
                \"text\": f\"{i}\",
                \"height\": dp(56),
                \"on_release\": lambda x=f\"{i}\": self.set_to(x),
            # } for i in range(5)
             } for i in self.rates.keys()
        ]
        self.to_menu = MDDropdownMenu(
            caller=self.screen.ids.to_currency,
            items=to_items,
            position=\"auto\",
            width_mult=4,
        )
        self.to_menu.bind()
        
 ################################################## 
 ################### from items ###################     
        c = CurrencyRates()
        from_items = [
            {
                \"viewclass\": \"OneLineListItem\",
                \"text\": f\"{i}\",
                \"height\": dp(56),
                \"on_release\": lambda x=f\"{i}\": self.set_from(x),
            } for i in self.rates.keys()
           # } for i in range(5)
        ]
        self.from_menu = MDDropdownMenu(
            caller=self.screen.ids.from_currency,
            items=from_items,
            position=\"auto\",
            width_mult=4,
        )
        self.from_menu.bind()
        
##################################################
##################### set to ##################### 
    def set_to(self, text_item):
        if text_item != self.screen.ids.from_currency.text:
            self.screen.ids.to_currency.text = text_item
            self.to_menu.dismiss()
    
##################################################
#################### set from ####################
    def set_from(self, text_item):
        if text_item != self.screen.ids.to_currency.text:
            self.screen.ids.from_currency.text = text_item
            self.from_menu.dismiss()
            
##################################################
    def build(self):
        return self.screen
    
    
##################################################    
    def convert(self):
    
        c = CurrencyRates(force_decimal=True)
        amount = int(self.screen.ids.amount.text)
        from_currency = self.screen.ids.from_currency.text
        to_currency = self.screen.ids.to_currency.text
        converted_amount = c.convert(from_currency, to_currency, Decimal(amount))
        #print(converted_amount)
        self.root.ids.result.text = f\"{amount} {from_currency} = {converted_amount} {to_currency}\"
       
kv = \'\'\'
#<KvLang>
MDFloatLayout:
    md_bg_color: 1,1,1,1
    MDLabel:
        text: \'Currency Convertor\'
        pos_hint: {\'center_x\': .5, \'center_y\': .9}
        halign: \'center\'
        font_name: \'media/poppins-bold\'
        front_size: \'32sp\'
    MDFloatLayout:
        size_hint: .85,.2
        pos_hint: {\'center_x\': 0.5,\'center_y\': 0.7}
        MDLabel:
            text: \"Enter Amount\"
            pos_hint: {\'center_x\': 0.5, \'center_y\': 0.85}
            font_name: \'media/poppins-medium\'
            font_size: \'18sp\'
        MDFloatLayout:
            size_hint_y: .5
            pos_hint: {\'center_x\': .5, \'center_y\':.38}
            canvas.before:
                Color:
                    rgb: 210/255, 210/255, 210/255, 1
                Line:
                    width: 1.2
                    rounded_rectangle:self.x, self.y, self.width, self.height, 6, 6, 6, 6, 100
            TextInput:
                id: amount
                text: \'\'
                size_hint: 1, None
                pos_hint: {\'center_x\': .5, \'center_y\': .5}
                height: self.minimum_height
                font_name: \'media/poppins-medium\'        
                font_size: \'18sp\'
                hint_text_color: 170/255, 170/255, 170/255, 1
                background_color: 1, 1, 1, 0
                padding: 13
                cursor_color: 0,0,0,1
                multiline: False
                
    MDFloatLayout:
        size_hint: .85, .2
        pos_hint: {\'center_x\': .5, \'center_y\': .46}
        MDFloatLayout:
            pos_hint: {\'center_x\': .6, \'center_y\': .5} 
            MDLabel:
                text: \"From\"
                pos_hint: {\'center_x\': 0.5, \'center_y\': 0.85}
                font_name: \'media/poppins-medium\'
                font_size: \'18sp\'
                
            DropdownButton:                
                id: from_currency
                text: \'EUR\'
                size_hint: .25, .5
                pos_hint: {\'center_x\': .125, \'center_y\':.38}
                background_color: 0, 0, 0, 0
                color: 0, 0, 0, 1 
                font_size: \'20sp\'
                font_name: \'media/poppins-medium\'
                on_release: app.from_menu.open()
                # on_release: print(\'Hello\')
                canvas.before:
                    Color:
                        rgb: 210/255, 210/255, 210/255, 1
                    Line:
                        width: 1.2
                        rounded_rectangle:self.x, self.y, self.width, self.height, 6, 6, 6, 6, 100
        Image:
            source: \'media/arrow.png\'
            size_hint: .35, .35
            pos_hint: {\'center_x\': .5, \'center_y\': .38} 
            
        MDFloatLayout:
            pos_hint: {\'center_x\':1.15, \'center_y\': .5} 
            MDLabel:
                text: \"To\"
                pos_hint: {\'center_x\': 0.5, \'center_y\': 0.85}
                font_name: \'media/poppins-medium\'
                font_size: \'18sp\'
                
            DropdownButton:                
                id: to_currency
                text: \'USD\'
                size_hint: .25, .5
                pos_hint: {\'center_x\': .125, \'center_y\':.38}
                background_color: 0,0,0,0
                color: 0,0,0,1
                font_name: \'media/poppins-medium\'
                font_size: \'20sp\'
                on_release: app.to_menu.open()
                canvas.before:
                    Color:
                        rgb: 210/255, 210/255, 210/255, 1
                    Line:
                        width: 1.2
                        rounded_rectangle:self.x, self.y, self.width, self.height, 6, 6, 6, 6, 100
                        
    MDLabel:
        id: result
        text: \'\'
        pos_hint: {\'center_x\': .5, \'center_y\': .3}
        halign: \'center\'
        font_name: \'media/poppins-medium\'
        font_size: \'18sp\'
        
    Button: 
        text: \'Get Exchange Rate\'
        font_name: \'media/poppins-medium\'
        size_hint: .85, .12
        font_size: \'18sp\'
        pos_hint: {\'center_x\': .5, \'center_y\': .15}
        background_color: 1,1,1,0
        color: 1,1,1,1
        # on_release: print(\'result\')
        on_release: app.convert()
        canvas.before:
            Color: 
                rgb: 71/255, 104/255, 237/255, 1
            RoundedRectangle:
                size: self.size
                pos: self.pos
                radius: [6]
#<KvLang>
\'\'\'

CurrencyConvertor().run()
LabelBase.register(name=\"Poppins\", fn_regular=\"media/Poppins-Regular.ttf\")     
    

它可以打印出所有的货币转换。示例:当我输入 10,000 美元的值时,需要将其转换为欧元,结果如下图所示: 10000 欧元 = 10131.0000 美元

如果我需要格式化结果,我该怎么办: 1) 美元和欧元的每千个逗号?和 2) 指定美元中的 2 位小数? 因此可以轻松阅读而不会分心

    标签: python kivymd


    【解决方案1】:

    对于逗号,您可以使用格式。

    commas = lambda x: f'{x:,}'
    
    print(list(map(commas, [1000000, 22992992, 399999990])))
    
    
    ['1,000,000', '22,992,992', '399,999,990']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      相关资源
      最近更新 更多