本文目錄一覽:
- 1、在vfp中str(28.456,6,2)的值
- 2、matlab里,怎樣對小數取有效位?我想把m=0.34取為m=0.3,該怎樣?
- 3、matlab 將數字轉換成字符串,可不可以按小數點後的位數來保留?
- 4、Visual FoxPro 為什麼 str(1,2)的結果是2?
- 5、Python自動生成數據日報
在vfp中str(28.456,6,2)的值
str()即數值轉換字符函數
功能是返回與指定數值表達式對應的字符.
語法:
str(數值表達式[,長度[,小數位數]])
數值表達式:要被轉換為字符的數值表達式.
長度:轉換後字符的長度.該長度等於小數點和小數點右邊第個數字所佔字符的數目總和.如果指定長度大於所需長度,自動在前面加空格補齊.如果指定長度小於所需長度,返回一串星(*)號,表示數值溢出.如省略長度,則默認長度為10.
小數位數:指定返回字符串中的小數位數.如指定位數小於實際位數,則返回值四捨五入.如指定位數大於實際位數,則加0補齊.如省略小數位數,默認為0.在指定了小數位數的情況下,如指定長度(第二個參數)小於總長度,但大於整數長度,則返回對小數部分做了四捨五入的字符.
例如:str(1234.567,7,2)結果為字符串1234.57
str(1234.567,6,2)結果為字符串1234.6
matlab里,怎樣對小數取有效位?我想把m=0.34取為m=0.3,該怎樣?
matlab裏面好像只能對總的有效位數進行控制,只對小數的話目前沒有太好的辦法。有些方法是可以用的,就是太複雜了,比如說
方法1:digits+vpa 方法
該方法是用digits()設定運算精度,然後用vpa獲得所要的小數位數。該方法可以達到獲取需要的任意位小數,但弊端很多,其1,運算精度里包含了整數部分,所以需要提取整數部分和分數部分,並計算整數部分的位數,以下程序中求len就是整數位數。其2,獲得的結果是符號型,符號型的運算速度要比數值慢上很多。
format long
a = input(‘please give a number which will be changed£º’);
n = input(‘how many decimal digits will you keep: ‘);
num = floor(a);
str = num2str(num);
len = length(str);
err = a-num; % 獲取小數部分
digits(n+len); % 此處為需要的小數位 + 整數位數
need_num = num+vpa(err,n+len); %%%% 獲得按要求保留的小數,但獲得的是符號性
need_str = num2str(double(need_num)) %%%%% 符號型轉浮點型,再轉字符型
運行結果:
please give a number which will be changed:3.1415926
how many decimal digits will you keep: 2
need_str =
3.14
方法2:round 函數法
該方法為先將要保留的部分轉成整數,即切除不要的尾部,然後再恢復成所要的相應小數。該方法最為簡潔,但不可恢復。
format long
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
b = a*10^n;
aa = round(b);
need_num = aa/10^n; %%%%% 先化成整數,再轉成小數
need_str = num2str(need_num)
運行結果:
please give a number which will be changed:pi
how many decimal digits will you keep: 2
need_str =
3.14
方法3:直接轉成字符串,再取需要位數
該方法是直接轉成需要的字符串,再截取所要的小數位。缺點是連四捨五入都沒有,直接截斷尾部。
format long
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
num = floor(a);
str = num2str(num);
len = length(str);
str1 = num2str(a);
need_str = str1(1:(len+n+1)) %%%取需要的長度,這裡需要加上整數長和小數點1位
運行結果:
please give a number which will be changed:pi
how many decimal digits will you keep: 2
need_str =
3.14
方法4:fprintf方法
該方法僅僅只是輸出顯示,並無法達到轉成字符的效果。而且無法動態控制。
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
fprintf(‘a = %3.2f\n’,a) %%%%3.2f中.2就是小數位數
運行結果:
please give a number which will be changed:pi
how many decimal digits will you keep: 2
a = 3.14
matlab 將數字轉換成字符串,可不可以按小數點後的位數來保留?
你問的這個問題很有意思啊,matlab要保留任意位數,是一個比較值得研究的東西。
默認format也就是format short是保留4位小數,format long 是保留14位,如果要保留兩位或者六位,就存在如何設置的問題。本人做了點總結,給出以下方法
方法1:digits+vpa
format long
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
num = floor(a);
str = num2str(num);
len = length(str);
err = a-num;
digits(n+len); % 此處為需要的小數位+整數位數
need_num = num+vpa(err,n+len); %%%% 這裡得到的是符號型
need_str = num2str(double(need_num)) %%%%% 再次轉換獲得字符型
方法2:round 函數法
format long
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
b = a*10^n;
aa = round(b);
need_num = aa/10^n; %%%%% 先化成整數,再轉成小數
need_str = num2str(need_num)
方法3:直接轉成字符串再截取
format long
a = input(‘please give a number which will be changed:’);
n = input(‘how many decimal digits will you keep: ‘);
num = floor(a);
str = num2str(num);
len = length(str);
str1 = num2str(a);
need_str = str1(1:(len+n+1)) %%%取需要的長度,這裡需要加上整數長和小數點1位
方法4:fprintf方法
a = input(‘please give a number which will be changed:’);
%n = input(‘how many decimal digits will you keep: ‘);
fprintf(‘a = %3.2f’,a) %%%%3.2f中.2就是小數位數
Visual FoxPro 為什麼 str(1,2)的結果是2?
str()顯示的為數值四捨五入的結果(按你小數的精度,若無小數位指定,則默認為顯示整數)
所以str(1,2)顯示為1
若Str(1.5,2)則顯示為2
Python自動生成數據日報
import pandas as pd
import numpy as np
import collections as Counter
from datetime import datetime
df=pd.read_excel(“D:\曾海峰\python零一課程\用Python自動生成數據日報!\銷售數據明細.xlsx”,
parse_dates=[‘銷售日期’])
df.head()#數據預覽
df.info()#查看數據屬性
“””
計算指標
計算指標設定,設置本文需要計算的指標,指標計算如下:
收入=銷量*銷售額
單量=銷量匯總
貨品數=貨品數去重
收入環比:本月收入/上月收入-1
單量環比:本月單量/上月單量-1
計算本月相關指標
首先選取本月的數據,本月截止到2021年12月25日的數據,分別計算本月截止12月25日收入、
本月截止12月25日單量、本月截止12月25日貨品數。”””
“””shouru1=(the_month[‘銷量’]*the_month[‘銷售額’]).sum()#本月截止12月25日收入
danliang1=the_month[‘銷量’].sum()#本月截止12月25日單量
huopin1=the_month[‘貨號’].unique()#本月截止12月25日貨品數
list_huopin1=len(huopin1.tolist())
print(“本月截止到12月25日收入為{:.2f}元,單量為{}個,貨品數為{}個”.format(shouru1,danliang1,list_huopin1))”””
“””計算上月相關指標
同時選取上月同期的數據,數據範圍11月1日到11月25日的數據,分別計算上月同期的收入、上月同期的單量、上月同期的貨品數。”””
“””shouru2=(last_month[‘銷量’]*last_month[‘銷售額’]).sum()#本月截止12月25日收入
danliang2=last_month[‘銷量’].sum()#本月截止11月25日單量
huopin2=last_month[‘貨號’].unique()#本月截止11月25日貨品數
list_huopin2=len(huopin2.tolist())
print(“本月截止到11月25日收入為{:.2f}元,單量為{}個,貨品數為{}個”.format(shouru2,danliang2,list_huopin2))”””
“””利用函數進行封裝
以上我們可以發現規律,計算本月的相關指標數據與計算上月同期的指標數據計算邏輯是一樣的,除了數據選取的日期不一樣,我們可以自定義一個函數,用於計算相關的數據指標,簡化數據計算的流程。”””
def get_month_date(df):
shouru=(df[‘銷量’]*df[‘銷售額’]).sum()
danliang=df[‘銷量’].sum()
huopin=df[‘貨號’].nunique()
#list_huopin=len(huopin.tolist())
#return(shouru,danliang,list_huopin)
return(shouru,danliang,huopin)
the_month=df[(df[‘銷售日期’]=datetime(2021,12,1))(df[“銷售日期”]=datetime(2021, 12,25))]
shouru1,danliang1,huopin1=get_month_date(the_month)#計算本月數據指標
print(“本月截止12月25日收入為{:.2f}元,單量為{}個,貨品數為{}個”.format(shouru1,danliang1,huopin1))
last_month=df[(df[‘銷售日期’]=datetime(2021,11,1))(df[“銷售日期”]=datetime(2021, 11,25))]
shouru2,danliang2,huopin2=get_month_date(last_month)#計算本月數據指標
print(“上月截止11月25日收入為{:.2f}元,單量為{}個,貨品數為{}個”.format(shouru2,danliang2,list_huopin2))
“””計算環比 構建一個DataFrame,填入具體的計算指標數值,計算環比數據。”””
ribao=pd.DataFrame([[shouru1,shouru2],
[danliang1,danliang2],
[huopin1,huopin2]],
columns=[“本月”,”上月”],
index=[‘收入’,’單量’,’貨品數’])
ribao[‘環比’]=ribao[‘本月’]/ribao[‘上月’]-1
ribao[‘環比’]=ribao[‘環比’].apply(lambda x:format(x,’.2%’))#數據小數轉百分數,%2表示保留小數點後2位
ribao
“”可以將具體的數據日報導出到本地。””
ribao.to_excel(r’C:\Users\liangfeng\Desktop\數據日報.xlsx’,index=False)
df[‘銷售月份’]=df[‘銷售日期’].astype(str).str[0:7].str.replace(‘-‘,”)
df_group=df.groupby(“銷售月份”).aggregate({‘銷售額’:’sum’,’銷量’:’sum’})
df_group=df.groupby(“銷售月份”).aggregate({“銷售額”:”sum”,”銷量”:”sum”})
df_group
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.faker import Faker
v1 = df_group[‘銷售額’].round(2).tolist()
v2 = df_group[‘銷量’].tolist()
bar = (Bar()
.add_xaxis(df_group.index.tolist())
.add_yaxis(“銷售額”, v1 ,category_gap=”60%”,gap=”10%”) #設置柱形間隙寬度
.extend_axis(yaxis=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter=”{value} 單”), min_=0,max_=1750))#設置次坐標軸坐標大小
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))#顯示數據標籤
.set_global_opts(title_opts=opts.TitleOpts(title=”21年每月銷售額與銷量情況”),
datazoom_opts=opts.DataZoomOpts(),#添加滾動條
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter=”{value} 元”),min_=0,max_=850000)))#設置主坐標軸坐標大小
line = Line().add_xaxis(df.index.tolist()).add_yaxis(“銷售量”, v2, yaxis_index=1, is_smooth=True)
bar.overlap(line)
bar.render_notebook() ###bar.render(r’C:\Users\尚天強\Desktop\銷售日報.html’)
原創文章,作者:QGPRR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/324700.html