图表控件TeeChart干货分享(绘制2D、3D实时曲线---VC++示例源代码--网络首发)

最近接手了一个项目,其中涉及到MFC和实时曲线显示的问题,由于我之前从未接触过此类技术,现学现搞,把其间用到的觉得对初学者有用的东西,总结一下。

尤其是关于TeeChart控件部分,网上资料零碎,且很多不全面,代码难以使用。我苦寻数周在外国一些网站上寻到了一些有用的信息,把相关的可运行的代码示例贴在文中,希望能帮到后来者。

(如有疑问可在帖子后面留言) 

 

MFC部分:


一、

分割窗体


新建一个单文档的MFC工程(注意在向导中设置窗口最大化和分割窗口支持)。

新建两个对话框,用于分割窗口

【注意】对话框的样式(Style)属性改为下层(Child),边框(Border)属性改为None,最开始没有改这个,程序运行的时候报错了。

【注意】将两个对话框生成从CFormView派生的类。

 

在CMainFrame的OnCreateClient中添加

【例1】把框架分割成两列,右边的一列和对话框绑定。

m_SplitterWnd.CreateStatic(this,1,2)); //把此框架窗口分割成1行2列。
m_SplitterWnd.SetColumnInfo(0, 200, 0) ; //设置第0列的最大宽度为200,最小宽度为0 (此句话非常重要)
CRect rect;
GetClientRect(&rect);//第1行第1列的窗口与CMyView绑定。其宽度为框架宽度的3/4.高度与框架的高度一致
if(!m_SplitterWnd.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(rect.Width()/4*3,rect.Height()),pContext)||//第1行第2列的窗口与我们的对话框CMyDlg绑定。其宽度为框架宽度的1/4.!m_SplitterWnd.CreateView(0,1,RUNTIME_CLASS(CMyDlg),CSize(rect.Width()/4,rect.Height()),pContext))
{  return FALSE;
}return TRUE;

 

【例2】在分割后的子窗口上继续分割

在CMainFrame中添加两个成员变量,类型为CSplitterWnd,如下所示

CSplitterWnd m_splitterWnd1;

CSplitterWnd m_splitterWnd2;

 

添加虚函数virtualBOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);

程序代码修改部分如下:

BOOLCMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{//创建一个静态分栏窗口,分为一行二列if(m_splitterWnd1.CreateStatic(this,1,2)==NULL)return FALSE;//设置分割窗口的大小***m_splitterWnd1.SetColumnInfo(0, 200, 0) ; //设置第0列的最大宽度为200,最小宽度为0//将CCSplitterWndView连接到0行0列窗格上m_splitterWnd1.CreateView(0,0,RUNTIME_CLASS(CsplitterwndView),CSize(600,500),pContext);//将第0行1列再分开2行1列if(m_splitterWnd2.CreateStatic(&m_splitterWnd1,2,1,WS_CHILD|WS_VISIBLE,m_splitterWnd1.IdFromRowCol(0, 1))==NULL)return FALSE;//将FormView1类连接到第二个分栏对象的0行0列m_splitterWnd2.CreateView(0,0,RUNTIME_CLASS(CForm1),CSize(0,300),pContext);//因为是上下分割,故系统不关注宽度,只看高度,故宽度可以为0//将FormView2类连接到第二个分栏对象的1行0列m_splitterWnd2.CreateView(1,0,RUNTIME_CLASS(CForm2),CSize(0,0),pContext);  //此高度为0,意为分割后剩下的高度 就是它的了。return TRUE;
}
//CsplitterwndView、CForm1、CForm2都是我们自定义的类,可以把他们换成对话框或表单等。

 

//初始左右分割框架,要调用函数SetColumnInfo来设定分割线位置

对分割出来的一列再进行分割,则是由CreateView中CSize的高度来确定分割线位置

 

*总结:

* 给框架窗口添加静态拆分视图的过程如下:

*  1. 给框架窗口类添加一个CsplitterWnd数据成员。                    

*  2. 覆盖框架窗口的OnCreateClient函数,并调用CsplitterWnd::CreateStatic来创建静态拆分视图。           

*  3. 使用CsplitterWnd::CreateView在每个静态拆分窗口的窗格中创建视图

*      使用静态拆分窗口的一个优点是由于您自己给窗格添加视图,所以可以控制放入视图的种类

 

二、

添加自定义消息响应


1、在Resource.h中添加

#define WM_MY_MESSAGE (WM_USER+100)

 

2、在CMyView的定义中添加:     //CMyView是要响应自定义消息的我们的视图类

//{{AFX_MSG(CMyView)

afx_msg LRESULT OnMyMsg(WPARAM, LPARAM) ;

DECLARE_MESSAGE_MAP()

//}}AFX_MSG

 

3、在CMyView的实现cpp文件中添加

BEGIN_MESSAGE_MAP(CMyView, CFormView)

   //{{AFX_MSG_MAP(CMyView)

   ON_MESSAGE(WM_MY_MESSAGE, OnMyMsg) //添加消息映射

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

4、实现消息映射函数LRESULT CMyView::OnMyMsg(WPARAM wParam, LPARAM lParam)

 

5、发送消息,触发消息响应函数

pMyView->PostMessage(WM_MY_MESSAGE,0, 0);    //至于PostMessage和SendMessage的区别 请百度之。

 //pMyView是CMyView类对象的指针。

 



TeeChart部分(以VC++6.0  TeeChart8.0为例)


至于如何获取TeeChart控件,如何注册控件,请百度之,网上有很多。



在相应的源文件中添加TeeChart的头文件 (有需要的自己再添加)

#include "tchart.h"

#include "series.h"

#include "valuelist.h"

#include "axes.h"

#include "axis.h"

#include "pen.h"

#include "axislabels.h"

#include "teefont.h"

#include "axistitle.h"

#include "aspect.h"

#include "fastlineseries.h"

#include "titles.h"

#include "fastlineseries.h"

#include "panel.h"

#include "legend.h"

#include "annotationtool.h"

#include "page.h"

#include "strings.h"

#include "gradient.h"

#include "IsoSurfaceSeries.h"

 

一、

在视图类中动态添加TeeChart控件。(解决手工拖动添加控件,编译报”Debug Assertion Failed” 错的问题)


我们添加对话框资源让其继承自CFromView。首先手工静态把控件拖到对话框上,然后建立类向导,生成一个对象m_chart。

 

在主框架CMainFrame::OnCreateClient()或OnCreate()中【看在哪个函数中分割窗口 产生视图】

   RecalcLayout();           //这一句很重要,没有它,会报错。

   pView->OnInitialUpdate(); //pView是我们分割窗口得到的CMyDlgView视图的指针。

 

在视图类CMyDlgView中添加OnInitialUpdate()函数

   CRect rect;

   GetClientRect(&rect);  

   m_chart.MoveWindow(&rect, TRUE);

 

在视图类CMyDlgView中添加WM_CREATE消息响应函数OnCreate()在其中添加

       m_chart.Create("",WS_VISIBLE, CRect(0, 0, 0, 0), this, 1234) ;//动态生成控件

       m_chart.AddSeries(0);//操作控件

       m_chart.Series(0).FillSampleValues(50);

//m_chart是我们的控件TeeChart

 

即可。

//但此为动态添加的控件,所有设置操作都得通过代码操作。

 

二、

绘制2D曲线


这个在网上有很多资料了。我在这里再简单总结一下其过程。

 

A、初始化部分:

在TeeChart控件所在的视图类的OnCreate函数中,进行TeeChart控件的初始化工作。

       m_chart.Create("",WS_VISIBLE, CRect(0, 0, 0, 0), this, 1234) ; //动态创建TeeChart控件m_chart.GetLegend().SetVisible(false);//隐藏图例m_chart.GetAspect().SetView3D(FALSE);  //取消3D显示//设置图标标题m_chart.GetHeader().GetText().SetItem(0,COleVariant("传感器实时数据曲线"));//设置纵轴标题m_chart.GetAxis().GetLeft().GetTitle().SetCaption("数值");//设置渐变背景m_chart.GetPanel().GetGradient().SetVisible(true);m_chart.GetPanel().GetGradient().SetStartColor(RGB(192,192,192));m_chart.GetPanel().GetGradient().SetEndColor(RGB(255,255,255));//添加曲线m_chart.AddSeries(0);//设置曲线属性m_chart.Series(0).SetColor(RGB(255,0,0));//颜色m_chart.Series(0).GetAsLine().GetLinePen().SetWidth(2); //线型宽度//设置x轴的取值范围m_chart.GetAxis().GetBottom().SetMinMax(0,100);//设置x轴上值的格式m_chart.GetAxis().GetBottom().GetLabels().SetValueFormat("0.0");

 

B、绘制部分:

在TeeChart控件所在的视图类的自定义消息响应函数OnMyMsg中,或是在定时器中,添加:

 

       COleDateTimeCurTime = COleDateTime::GetCurrentTime();COleDateTimeSpantmSpan = COleDateTimeSpan(0,0,1,0); //1sCStringcsTime ;csTime= CurTime.Format("%H:%M:%S"); //获取当前时间//在CMyView中画曲线m_chart.Series(0).Add(yVal, csTime,RGB(255,0,0)); //第一个参数是y轴值,第二个参数是对应的x轴的标签值(此为当前时间字符串),第三个参数是所绘点的颜色。CurTime+= tmSpan;m_chart.Series(0).RefreshSeries();if(m_chart.Series(0).GetCount() > 100){m_chart.GetAxis().GetBottom().Scroll(1.0,true); //x坐标轴一次移动1格}

 

由于TeeChart绘制曲线点的函数Add,每调用一次才绘制一次,故需要有外部消息激发消息响应函数,才能把曲线动态绘制出来。

可以用设置定时器和自定义消息响应函数的方式来实现。(定时器比较简单,消息响应函数上面MFC部分已经讲过)





三、

绘制3D曲线


解决TeeChart8中绘制3D图形报”Invalid class typecast” 错的问题。


A、在承载TeeChart的对话框类Dlg的类定义中,添加:VARIANT SeriesIndex;

 

B、在类的相关方法中绘制,添加代码:

m_chart.RemoveAllSeries();

 

//下面的设置很重要(没有的话,会出错)

SeriesIndex.vt=VT_INT;

SeriesIndex.intVal=m_chart.AddSeries(scWaterfall);//scWaterfall=33瀑布图的编号

m_chart.Series(0).GetAsWaterfall().SetIrregularGrid(true);

 

m_chart.Series(0).GetAsWaterfall().AddXYZ(x,y, z, NULL, RGB(255,0,0));

 

(TeeChart的3D图有很多种,上面是以瀑布图为例的,其他图种的编号如下:)

const unsigned long scLine = 0;

const unsigned long scBar = 1;

const unsigned long scHorizBar = 2;

const unsigned long scArea = 3;

const unsigned long scPoint = 4;

const unsigned long scPie = 5;

const unsigned long scFastLine = 6;

const unsigned long scShape = 7;

const unsigned long scGantt = 8;

const unsigned long scBubble = 9;

const unsigned long scArrow = 10;

const unsigned long scCandle = 11;

const unsigned long scPolar = 12;

const unsigned long scSurface = 13;

const unsigned long scVolume = 14;

const unsigned long scErrorBar = 15;

const unsigned long scBezier = 16;

const unsigned long scContour = 17;

const unsigned long scError = 18;

const unsigned long scPoint3D = 19;

const unsigned long scRadar = 20;

const unsigned long scClock = 21;

const unsigned long scWindRose= 22; 

const unsigned long scBar3D = 23; 

const unsigned long scImageBar = 24; 

const unsigned long scDonut = 25;

const unsigned long scTriSurface = 26;

const unsigned long scBox = 27;

const unsigned long scHorizBox = 28;

const unsigned long scHistogram = 29;

const unsigned long scColorGrid = 30;

const unsigned long scBarJoin = 31;

const unsigned long scHighLow = 32;

const unsigned long scWaterfall = 33;

const unsigned long scSmith = 34;

const unsigned long scPyramid = 35;

const unsigned long scMap = 36;

const unsigned long scHorizLine = 37;

const unsigned long scFunnel = 38;

const unsigned long scCalendar = 39;

const unsigned long scHorizArea = 40;

const unsigned long scPointFigure = 41;

const unsigned long scGauge = 42;

const unsigned long scVector3D = 43;

const unsigned long scTower = 44;

const unsigned long scPolarBar = 45;

const unsigned long scBubble3D = 46;

const unsigned long scHorizHistogram = 47;

const unsigned long scVolumePipe = 48;

const unsigned long scIsoSurface = 49;

const unsigned long scDarvas = 50;

const unsigned long scHighLowLine = 51;

const unsigned long scPolarGrid = 52;

const unsigned long scDeltaPoint = 53;

const unsigned long scImagePoint = 54;

const unsigned long scOrganizational = 55;

const unsigned long scWorld = 56;

const unsigned long scTagCloud = 57;

const unsigned long scKagi = 58;

const unsigned long scRenko = 59;

const unsigned long scNumericGauge = 60;

const unsigned long scLinearGauge = 61;

const unsigned long scCircularGauge = 62;

const unsigned long scBigCandle = 63;

const unsigned long scLinePoint = 64;

 

//如需要相关图种,只需把上面代码

SeriesIndex.intVal= m_chart.AddSeries(scWaterfall);//把scWaterfall改为你所需图种的编号

m_chart.Series(0).GetAsWaterfall().SetIrregularGrid(true);// GetAsWaterfall改为你所需图种的相关函数名

 

----------------

一个完整的例子:


A、在CMyView(承载TeeChart的对话框视图)的定义中,添加VARIANTSeriesIndex;

 

B、在int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中:

int CMyView::OnCreate(LPCREATESTRUCTlpCreateStruct)
{if(CFormView::OnCreate(lpCreateStruct) == -1)return-1;//TODO: Add your specialized creation code herem_chart.Create("",WS_VISIBLE, CRect(0, 0, 0, 0), this, 1234) ;m_chart.GetLegend().SetVisible(false);//隐藏图例m_chart.GetAspect().SetView3D(true);  //3D显示m_chart.GetAxis().GetDepth().SetVisible(TRUE);  //显示Z轴m_chart.GetAxis().GetDepth().GetLabels().SetVisible(TRUE);  //显示Z轴上的坐标m_chart.GetAxis().GetDepth().GetLabels().SetStyle(0);  //设置显示坐标的风格//设置渐变背景m_chart.GetPanel().GetGradient().SetVisible(true);m_chart.GetPanel().GetGradient().SetStartColor(RGB(192,192,192));m_chart.GetPanel().GetGradient().SetEndColor(RGB(255,255,255));//设置图标标题m_chart.GetHeader().GetText().SetItem(0,COleVariant("瀑布图"));//开始绘制3Dm_chart.RemoveAllSeries();SeriesIndex.vt=VT_INT;SeriesIndex.intVal=m_chart.AddSeries(49);// 49号图种,IsoSurface类型3Dm_chart.Series(0).GetAsIsoSurface().SetIrregularGrid(true);//设置曲线颜色m_chart.Series(0).SetColor(RGB(255,0,0));m_chart.GetAxis().GetBottom().SetMinMax(0,100);m_chart.GetAxis().GetBottom().GetLabels().SetValueFormat("0.0");m_chart.GetAspect().SetChart3DPercent(30);//调整3D纵深比return0;
}

C、在自定义的消息处理函数中:

LRESULT CMyView::OnMyMsg(WPARAM wParam,LPARAM lParam)
{staticdouble xVal = .0 ;doubleyVal = .0 ;CTSDoc* pDoc =  (CTSDoc*)(this->GetDocument()) ;yVal= pDoc->clientDataBuff[0] ;for(int zVal=0; zVal<50; zVal++)m_chart.Series(0).GetAsIsoSurface().AddXYZ(xVal,yVal, (double)zVal,NULL,RGB(255,(int)(yVal*30)+160,0));m_chart.Series(0).RefreshSeries();if(m_chart.Series(0).GetCount() > 100){m_chart.GetAxis().GetBottom().Scroll(1.0,true); //坐标轴一次移动1格}xVal++;return0 ;
}




四、

用AddArray一次把数组中的值绘制出来


1、先在TeeChart所在的类中 添加:

COleSafeArray XValues;

COleSafeArray YValues;

 

2、再在TeeChart的初始化设置函数添加:

DWORD numElements[] = {200000};// Create the safe-arrays...
XValues.Create(VT_R8, 1, numElements);YValues.Create(VT_R8,1, numElements);// Initialize them with values...
long index;
for(index=0; index<200000; index++) {double val = (double)index;XValues.PutElement(&index, &val);
};for(index=0; index<200000; index++) {double val = rand()%100;YValues.PutElement(&index, &val);
};
 

3、在相应的位置添加:

m_chart.Series(0).AddArray(200000,YValues,XValues);

 

 

//附赠:本人搜集的一些TeeChart的相关资料。链接:http://download.csdn.net/detail/yang_yulei/7685021


//此文为网上首发,转载请注明出处,谢谢!

 


 




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57687.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

winform上的统计图——新手向

今天看见一篇适合新手理解和使用WinForm Chart控件的文章 目录 图标的要素 一、图表实现 图表标题 图例 XY坐标轴 数据 二、代码实现 转载 图标的要素 这是一张普通的柱状统计图&#xff0c;包括了&#xff1a; 图表标题图例XY轴标题数据 一般在上位机中有这些要素…

老鼠屎地理信息可视化第三弹:Plotly+Pyecharts绘制地理坐标系线图

由于最近老鼠屎做的东西和地图上的线型图相关&#xff0c;因此在这里做一点简单总结。很多地方都调试得很不理想&#xff0c;希望成功的地方可以给大家带来一点点启发&#xff0c;不理想的地方也欢迎大神们赐教。 1 Plotly 1.1 地图上绘制线 有关pyplot的相关在老鼠屎的博文使…

Echarts 地理信息可视化:基于地图显示坐标点信息

Ecahrts 基于地理信息的可视化 Echarts 是一款基于js的交互式图表工具 这一模型可用于显示气候、地理、人流等各种信息。 1、环境 在线调试echarts的功能可以在官网&#xff0c;选择实例下任意一个点开&#xff1a; 然后在左侧的编辑框中即可编辑(其中包含了自动渲染脚本&…

数据可视化图表-散点图(Scatter plot)

本文是接着这篇内容的&#xff1a;https://blog.csdn.net/Cassiel60/article/details/88350442 散点图是用于研究两个变量之间关系的经典的和基本的图表。 如果数据中有多个组&#xff0c;则可能需要以不同颜色可视化每个组。 在 matplotlib 中&#xff0c;您可以使用 plt.sca…

实战PyQt5: 155-QChart图表之极坐标图表

在前面的图表中&#xff0c;我们使用的坐标系都是直角坐标系(也称笛卡尔坐标系), 但是有些数据序列&#xff0c;使用极坐标系来显示更合理(比如常见的雷达图)。QChart中&#xff0c;提供QPolarChart来实现用极坐标系显示的图表。 QPolarChart QPolarChart在极坐标图中显示数据…

2022-04-22 工作记录--Highcharts-图表点击事件 + 图例点击事件 + 图例格式化后的回调

Highcharts-图表点击事件 图例点击事件 图例格式化后的回调 一、前言 看似很简单的问题&#xff0c;其实里面有很多细节&#xff0c;所以做个笔记哟~❀ 如下图&#xff1a;上面是图表&#xff0c;下面是图例哟☺️ 二、官方文档 https://www.highcharts.com.cn/docs 三、…

XCL-Charts图表库简要教程及常见问题

这个Andriod图表库项目从开始至现在&#xff0c;热情消耗几近殆尽。还好已基本实现我想做的那些东西。趁还剩下点兴趣&#xff0c;把一些点非常简单的归纳一下。 所支持的图表类型: 基类 图表名称 BarChart 横/竖向柱形图及背向式柱…

使用Google Chart API 创建实时图表

实时图表可以实时显示数据。这意味着数据将永久更新以始终显示当前图表。要创建实时图表&#xff0c;我们使用JavaScript和Google Chart API。 这些实时图表通常用于仪表板中&#xff0c;以显示例如温度或价格的变化情况。应用领域多样&#xff0c;它们看起来确实不错。你自己看…

利用ARCGIS实现图片与excel中坐标点的匹配并绘图

一、背景 本次的实验完成的是坐标点文件与图片的匹配&#xff0c;已有的数据分别是点的坐标excel文件以及区域图片&#xff0c;来实现区域的绘制。 二、步骤 1、首先将坐标点excel文件导入ARCGIS中进行展点&#xff0c;数据的格式如下&#xff1a; 2、点击ARCGIS界面中的文件…

chatgpt赋能Python-python_plot坐标轴

Python绘图库中坐标轴的设置 介绍 Python是一种简单易学&#xff0c;功能强大的编程语言。它被广泛用于数据科学和可视化领域。Python绘图库中的坐标轴设置可以让我们更好地展示数据&#xff0c;让我们更轻松地理解数据。本篇文章将介绍Python绘图库中坐标轴设置的方法和技巧…

Unity数据可视化图表插件XCharts(折线图、柱状图、饼图、雷达图、散点图、热力图、热力图、仪表盘、环形图、极坐标、水位图等等)

文章目录 一、前言二、Unity数据可视化图表插件&#xff1a;XCharts1、运行效果2、文档教程 三、结束语 一、前言 点关注不迷路&#xff0c;持续输出Unity干货文章。 嗨&#xff0c;大家好&#xff0c;我是新发。 今天&#xff0c;我在GitHub上看到一个屌炸天的Unity插件&…

pyecharts0.5.x制作含地图的数据看板

引言 pyecharts作为Python的数据可视化包&#xff0c;其强大的功能不言而喻&#xff0c;Python Echart&#xff0c;想想就觉得牛叉。目前pyecharts有两个大的版本&#xff0c;一个是0.5.x版本的&#xff0c;一个是1.0以后版本&#xff0c;而且这两个版本差别很大。如果是有的…

antv/g2图表tooltip自定义并展示坐标之外的数据

首先使用itemTpl自定义tooltip 效果是这样的tooltip展示坐标之外的数据 感觉Antv文档很不详细&#xff0c;写这块时找了好久才找到方法&#xff0c;现在记一下&#xff0c;方便今后的观看和其他遇到此问题的同学解决办法。 itemTpl this.chart.tooltip({showCrosshairs: true,…

pyecharts源码解读(13)图表类包charts之组合图表:直角坐标系(网格布局)Grid

当前pyecharts的版本为1.9.0。 概述 pyecharts/charts/composite_charts/包中的四个模块分别定义了组合图表类&#xff0c;其中pyecharts/charts/composite_charts/grid.py模块只定义了网格布局类Grid。 Grid类继承自图表基类Base&#xff0c;作用为在一个echarts实例中利用…

宇宙中大数字

1、高德纳箭头 2、葛力函数 如果脑子里面装一个葛里恒数&#xff0c;脑子就成了黑洞了。 后来人们研究出tree3

CCF-CSP 小中大 C语言

时间限制&#xff1a;0.1s 空间限制&#xff1a;512.0MB #include<stdio.h> int main() { int n,max,min,mid,midd,i; scanf("%d",&n); int a[n]; for(i0;i<n;i) {scanf("%d",&a[i]);} //输入 if(a[0]>a[n-1]){maxa[0];mina[n-1];} e…

redis中大Value问题的解决

我们日常在使用redis的时候, 有时会碰到大Value的问题, 超级大的一个Value存到redis中去, 这样其实不好, 我们可以把value进行压缩. 下面我们使用java自带的压缩, 对字符串进行压缩. /*** 使用gzip压缩字符串** param originString 要压缩的字符串* return 压缩后的字符串*/…

java中大素数生成算法

目前的公开密钥 算法大部分基于大整数分解、有限域上的离散对数问题和椭 圆曲线上的离散对数问题&#xff0c;这些数学难题的构建大部分都需 要生成一种超大的素数&#xff0c;尤其在经典的RSA算法中&#xff0c;生成的素数的质量对系统的安全性有很大的影响。 1.原理 费马小…

解决js中大数的问题

大数的理解: 就是由于数字太大了,然后js解析不了,不认识. 就比如实际生活中,在双11的时候,我们知道淘宝一夜之间总购买量肯定是一个很大很大的金额,当我们前端碰到一个非常大的数字的时候,js可能会解析不了. JS中的安全数字: > Number.MAX_SAFE_INTEGER 可以查看js中的…

CSP 201903-1 小中大

题目链接&#xff1a; 计算机软件能力认证考试系统http://118.190.20.162/view.page?gpidT89 【分析】主要学一下java的四舍五入&#xff0c;String,format("%.f", double&#xff09;&#xff1b; import java.util.Arrays; import java.util.Scanner;public cla…