js二维数组传递java,ActiveX获取JavaScript传递的二维数组

此文参考了http://blog.csdn.net/playstudy/article/details/8259737,在此基础上做了改进

// WebDlg.idl : WebDlg 的 IDL 源

//

// 此文件将由 MIDL 工具处理以

// 产生类型库(WebDlg.tlb)和封送处理代码。

#include "olectl.h"

import "oaidl.idl";

import "ocidl.idl";

[

object,

uuid(1DC366A1-3040-4376-B4CD-26B0E7032641),

dual,

nonextensible,

pointer_default(unique)

]

interface IGetJavaScriptArray : IDispatch

{

[id(1)] HRESULT getArrayValue2D([in] VARIANT arrayPoints, [out,retval] LONG *result);

};

[

uuid(9C070B0B-F506-44C6-8163-CC9C502B12A3),

version(1.0),

]

library WebDlgLib

{

importlib("stdole2.tlb");

[

uuid(E5466677-5CF1-4870-98EA-01E9C4A198DF),

control

]

coclass GetJavaScriptArray

{

[default] interface IGetJavaScriptArray;

};

};

// GetJavaScriptArray.h : CGetJavaScriptArray 的声明

#pragma once

#include "resource.h"       // 主符号

#include

#include "WebDlg_i.h"

#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)

#error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"

#endif

using namespace ATL;

// CGetJavaScriptArray

class ATL_NO_VTABLE CGetJavaScriptArray :

public CComObjectRootEx,

public IDispatchImpl,

public IOleControlImpl,

public IOleObjectImpl,

public IOleInPlaceActiveObjectImpl,

public IViewObjectExImpl,

public IOleInPlaceObjectWindowlessImpl,

public ISupportErrorInfo,

public IQuickActivateImpl,

#ifndef _WIN32_WCE

public IDataObjectImpl,

#endif

public IProvideClassInfo2Impl,

public CComCoClass,

public CComControl

{

public:

CGetJavaScriptArray()

{

}

DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE |

OLEMISC_CANTLINKINSIDE |

OLEMISC_INSIDEOUT |

OLEMISC_ACTIVATEWHENVISIBLE |

OLEMISC_SETCLIENTSITEFIRST

)

DECLARE_REGISTRY_RESOURCEID(IDR_GETJAVASCRIPTARRAY)

BEGIN_COM_MAP(CGetJavaScriptArray)

COM_INTERFACE_ENTRY(IGetJavaScriptArray)

COM_INTERFACE_ENTRY(IDispatch)

COM_INTERFACE_ENTRY(IViewObjectEx)

COM_INTERFACE_ENTRY(IViewObject2)

COM_INTERFACE_ENTRY(IViewObject)

COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)

COM_INTERFACE_ENTRY(IOleInPlaceObject)

COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)

COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)

COM_INTERFACE_ENTRY(IOleControl)

COM_INTERFACE_ENTRY(IOleObject)

COM_INTERFACE_ENTRY(ISupportErrorInfo)

COM_INTERFACE_ENTRY(IQuickActivate)

#ifndef _WIN32_WCE

COM_INTERFACE_ENTRY(IDataObject)

#endif

COM_INTERFACE_ENTRY(IProvideClassInfo)

COM_INTERFACE_ENTRY(IProvideClassInfo2)

END_COM_MAP()

BEGIN_PROP_MAP(CGetJavaScriptArray)

PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)

PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)

// 示例项

// PROP_ENTRY_TYPE("属性名", dispid, clsid, vtType)

// PROP_PAGE(CLSID_StockColorPage)

END_PROP_MAP()

BEGIN_MSG_MAP(CGetJavaScriptArray)

CHAIN_MSG_MAP(CComControl)

DEFAULT_REFLECTION_HANDLER()

END_MSG_MAP()

// 处理程序原型:

//  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

//  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

//  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

// ISupportsErrorInfo

STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)

{

static const IID* const arr[] =

{

&IID_IGetJavaScriptArray,

};

for (int i=0; i

{

if (InlineIsEqualGUID(*arr[i], riid))

return S_OK;

}

return S_FALSE;

}

// IViewObjectEx

DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)

// IGetJavaScriptArray

public:

HRESULT OnDraw(ATL_DRAWINFO& di)

{

RECT& rc = *(RECT*)di.prcBounds;

// 将剪辑区域设置为 di.prcBounds 指定的矩形

HRGN hRgnOld = NULL;

if (GetClipRgn(di.hdcDraw, hRgnOld) != 1)

hRgnOld = NULL;

bool bSelectOldRgn = false;

HRGN hRgnNew = CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);

if (hRgnNew != NULL)

{

bSelectOldRgn = (SelectClipRgn(di.hdcDraw, hRgnNew) != ERROR);

}

Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);

SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);

LPCTSTR pszText = _T("GetJavaScriptArray");

#ifndef _WIN32_WCE

TextOut(di.hdcDraw,

(rc.left + rc.right) / 2,

(rc.top + rc.bottom) / 2,

pszText,

lstrlen(pszText));

#else

ExtTextOut(di.hdcDraw,

(rc.left + rc.right) / 2,

(rc.top + rc.bottom) / 2,

ETO_OPAQUE,

NULL,

pszText,

ATL::lstrlen(pszText),

NULL);

#endif

if (bSelectOldRgn)

SelectClipRgn(di.hdcDraw, hRgnOld);

return S_OK;

}

DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()

{

return S_OK;

}

void FinalRelease()

{

}

STDMETHOD(getArrayValue2D)(VARIANT arrayPoints, LONG *result);

HRESULT getArrayLength1D(IDispatch *pDisp, int *pLength);

HRESULT getArrayNumberOfIndex1D(IDispatch *pDisp, int index, int *pValue);

HRESULT setArrayNumberOfIndex1D(IDispatch *pDisp, int index, int value);

HRESULT getArrayLength2D(IDispatch *pDisp, int *pLength1, int *pLength2);

HRESULT getArrayNumberOfIndex2D(IDispatch *pDisp, int index1, int index2, int *pValue);

};

OBJECT_ENTRY_AUTO(__uuidof(GetJavaScriptArray), CGetJavaScriptArray)

// GetJavaScriptArray.cpp : CGetJavaScriptArray 的实现

#include "stdafx.h"

#include "GetJavaScriptArray.h"

#include

using namespace ATL;

// CGetJavaScriptArray

STDMETHODIMP CGetJavaScriptArray::getArrayValue2D(VARIANT arrayPoints, LONG *result)

{

if(arrayPoints.vt != VT_DISPATCH){*result = 0; return S_FALSE;} //数据类型不是VT_DISPATCH

int len1 = 0;

int len2 = 0;

HRESULT hr = getArrayLength2D(arrayPoints.pdispVal, &len1, &len2);

if(FAILED(hr)){*result = 0; return S_FALSE;}

//----------------------------------------

CString str = _T("CGetJavaScriptArray::getArrayValue2D():\n");

for(long i = 0; i < len1; i++)

{

for(long j = 0; j < len2; j++)

{

int value = -1;

getArrayNumberOfIndex2D(arrayPoints.pdispVal, i, j, &value);

CString str_temp = _T("");

str_temp.Format(_T("a[%d,%d]=%d\n"), i, j, value);

str += str_temp;

}

}

//----------------------------------------

this->MessageBoxW(str, _T("ActiveX获取JavaScript传递的二维数组"), MB_OK);

*result = 1;

return S_OK;

}

//获取Javascript数组长度

HRESULT CGetJavaScriptArray::getArrayLength1D(IDispatch *pDisp, int *pLength)

{

BSTR varName = L"length";

VARIANT varValue;

DISPPARAMS noArgs = {NULL, NULL, 0, 0};

DISPID dispId;

HRESULT hr = 0;

*pLength = 0;

hr = pDisp->GetIDsOfNames(IID_NULL, &varName, 1, LOCALE_USER_DEFAULT, &dispId);

if (FAILED(hr)){return hr;}

hr = pDisp->Invoke(dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, &varValue, NULL, NULL);

if(SUCCEEDED(hr))

{

*pLength = varValue.intVal;

}

return hr;

}

//获取Javascript数组中指定位置的整数元素值

HRESULT CGetJavaScriptArray::getArrayNumberOfIndex1D(IDispatch *pDisp, int index, int *pValue)

{

CComVariant varName(index, VT_I4); //数组下标

DISPPARAMS noArgs = {NULL, NULL, 0, 0};

DISPID dispId;

VARIANT varValue;

HRESULT hr = 0;

varName.ChangeType(VT_BSTR); //将数组下标转为数字型,以进行GetIDsOfNames

hr = pDisp->GetIDsOfNames(IID_NULL, &varName.bstrVal, 1, LOCALE_USER_DEFAULT, &dispId); //获取通过下标访问数组的过程,将过程名保存在dispId中

if(FAILED(hr)){return hr;}

hr = pDisp->Invoke(dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, &varValue, NULL, NULL); //调用COM过程,访问指定下标数组元素,根据dispId 将元素值保存在varValue中

if(SUCCEEDED(hr))

{

*pValue = varValue.intVal; //将数组元素按int类型取出

}

return hr;

}

// 设置Javascript数组中指定位置的整数元素值

HRESULT CGetJavaScriptArray::setArrayNumberOfIndex1D(IDispatch *pDisp, int index, int value)

{

CComVariant varName(index, VT_I4);

DISPID dispId;

CComVariant varValue;

HRESULT hr = 0;

varName.ChangeType(VT_BSTR); // 将数组下标转为数字型,以进行GetIDsOfNames

hr = pDisp->GetIDsOfNames(IID_NULL, &varName.bstrVal, 1, LOCALE_USER_DEFAULT, &dispId);

if (FAILED(hr)){return hr;}

DISPID dispidPut = DISPID_PROPERTYPUT; //put操作

DISPPARAMS dispparams;

dispparams.rgvarg = new VARIANTARG[1]; //初始化rgvarg

dispparams.rgvarg[0].vt = VT_I4; //数据类型

dispparams.rgvarg[0].intVal = value; //更新值

dispparams.cArgs = 1; //参数数量

dispparams.cNamedArgs = 1; //参数名称

dispparams.rgdispidNamedArgs = &dispidPut; //操作DispId,表明本参数适用于put操作

hr = pDisp->Invoke(dispId, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL);

return hr;

}

//获取Javascript数组长度

HRESULT CGetJavaScriptArray::getArrayLength2D(IDispatch *pDisp, int *pLength1, int *pLength2)

{

BSTR varName = L"length";

VARIANT varValue;

DISPPARAMS noArgs = {NULL, NULL, 0, 0};

DISPID dispId;

HRESULT hr = 0;

*pLength1 = 0;

*pLength2 = 0;

hr = pDisp->GetIDsOfNames(IID_NULL, &varName, 1, LOCALE_USER_DEFAULT, &dispId);

if (FAILED(hr)){return hr;}

hr = pDisp->Invoke(dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, &varValue, NULL, NULL);

if(SUCCEEDED(hr)){*pLength1 = varValue.intVal;}

//---------获取第二维长度-----------------------

if(*pLength1 > 0)

{

CComVariant varNameIndex(0, VT_I4); //数组下标

varNameIndex.ChangeType(VT_BSTR); //将数组下标转为数字型,以进行GetIDsOfNames

DISPID dispId2;

VARIANT varValue2;

hr = pDisp->GetIDsOfNames(IID_NULL, &varNameIndex.bstrVal, 1, LOCALE_USER_DEFAULT, &dispId2); //获取通过下标访问数组的过程,将过程名保存在dispId中

if(FAILED(hr)){return hr;}

hr = pDisp->Invoke(dispId2, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, &varValue2, NULL, NULL); //调用COM过程,访问指定下标数组元素,根据dispId 将元素值保存在varValue中

if(FAILED(hr)){return hr;}

if(varValue2.vt != VT_DISPATCH){return S_FALSE;}

IDispatch *pDisp2 = varValue2.pdispVal;

VARIANT varValue3;

DISPPARAMS noArgs = {NULL, NULL, 0, 0};

DISPID dispId3;

hr = pDisp2->GetIDsOfNames(IID_NULL, &varName, 1, LOCALE_USER_DEFAULT, &dispId3);

if(FAILED(hr)){return hr;}

hr = pDisp2->Invoke(dispId3, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs, &varValue3, NULL, NULL);

if(SUCCEEDED(hr)){*pLength2 = varValue3.intVal;}

}else

{

return S_FALSE;

}

return hr;

}

//获取Javascript数组中指定位置的整数元素值

HRESULT CGetJavaScriptArray::getArrayNumberOfIndex2D(IDispatch *pDisp, int index1, int index2, int *pValue)

{

CComVariant varNameIndex1(index1, VT_I4);

CComVariant varNameIndex2(index2, VT_I4);

DISPPARAMS noArgs1 = {NULL, NULL, 0, 0};

DISPID dispId1;

DISPID dispId2;

CComVariant varValue1;

CComVariant varValue2;

HRESULT hr = 0;

varNameIndex1.ChangeType(VT_BSTR); //将数组下标转为数字型,以进行GetIDsOfNames

varNameIndex2.ChangeType(VT_BSTR); //将数组下标转为数字型,以进行GetIDsOfNames

hr = pDisp->GetIDsOfNames(IID_NULL, &varNameIndex1.bstrVal, 1, LOCALE_USER_DEFAULT, &dispId1);

if (FAILED(hr)){return hr;}

hr = pDisp->Invoke(dispId1, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs1, &varValue1, NULL, NULL); //调用COM过程,访问指定下标数组元素,根据dispId 将元素值保存在varValue中

if(FAILED(hr)){return hr;}

if(varValue1.vt != VT_DISPATCH){return S_FALSE;} //varValue2.vt为第二维

//--------------------------------------------

IDispatch *pDisp2 = varValue1.pdispVal;

hr = pDisp2->GetIDsOfNames(IID_NULL, &varNameIndex2.bstrVal, 1, LOCALE_USER_DEFAULT, &dispId2);

if (FAILED(hr)){return hr;}

hr = pDisp2->Invoke(dispId2, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &noArgs1, &varValue2, NULL, NULL); //调用COM过程,访问指定下标数组元素,根据dispId 将元素值保存在varValue中

if(FAILED(hr)){return hr;}

*pValue = varValue2.intVal;

return S_OK;

}

对象 GetJavaScriptArray 的 ATL 8.0 测试页

function test()

{

var points = [[175, 42], [289, 72], [216, 64], [301, 131]];

var result = GetJavaScriptArray.getArrayValue2D(points); //将javascript二维数组传递到ActiveX控件中

}

运行结果:

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

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

相关文章

MySQL性能优化(五)undo log是如何实现MVCC的?

之前我们最开始的几篇文章就讲过&#xff0c;你除了写redolog日志还必须要写undo log日志&#xff0c;这个undo log日志是至关重要的&#xff0c;没有他&#xff0c;你根本都没办法回滚事务&#xff01; 1.事务 1.1.多线程并发执行多个事务 对于我们的业务系统去访问数据库而…

Linux中Shell脚本--awk的用法

语法格式&#xff1a;awk [选项] ‘指令’ 操作文件 常用选项&#xff1a;-F 指定分隔符&#xff0c;分隔符用""引起来 -v&#xff1a;varvalue在awk程序开始之前指定一个值valu给变量var&#xff0c;这些变量值用于awk程序的BEGIN快 -f&#xff1a;后面跟一个保存…

rh php70 php fpm,mac 通过brew安装php70 +php-fpm+ phalcon3.0.3

安装php7.0.15brew install homebrew/php/php70brew install homebrew/php/php70-mcryptbrew install homebrew/php/php70-redisbrew install homebrew/php/php70-msgpackbrew install homebrew/php/php70-memcached安装php后可执行文件所在路径(-v ):/usr/local/bin/php -v/us…

linux下的shell脚本(基础)

Shell是一种脚本语言&#xff0c;那么&#xff0c;就必须有解释器来执行这些脚本&#xff0c;常见的脚本解释器有&#xff1a; bash&#xff1a;是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成&#xff0c;是BourneAgain Shell的缩写&#xff0c;内部命令一共有…

mysql rsync复制,mysql复制又同步

mysql复制再同步由于一个老旧系统没有使用LVM分区,导致mylvmbackup不能使用。为了重新全量同步数据库&#xff0c;发现rsync可以使用&#xff0c;并且锁住数据库的时间不长。1. 首先刷新数据库到文件flush tables with read lock;unlock tables;2. 执行rsync进行数据库同步/usr…

解决springboot中只支持get请求,无法支持post请求

解决springboot中只支持get请求&#xff0c;无法支持post请求 报错信息如下&#xff1a; 405 相关类如下&#xff1a; RestController RequestMapping public class HttpServiceController {Autowiredprivate HttpSecretReport httpSecretReport;Autowiredprivate HttpSecret…

mysql2005卸载步骤,二次安装mysql步骤

1.先将mysql服务停止&#xff0c;并关闭服务页面(否则后面报错&#xff1a;“指定的服务已经标记为删除”)&#xff1a;打开“任务管理器”可以找到服务页面2.在控制面板对mysql进行删除。找到并将其卸载&#xff0c;如果没有直接跳过3.在注册表中删除相关目录。(使用组合键&qu…

Spring Boot 默认数据源 HikariDataSource_Spring Boot 中使用 Hikari

Spring Boot 默认数据源 HikariDataSource springboot2.x之后&#xff0c;系统的默认数据源由原来的的org.apache.tomcat.jdbc.pool.DataSource更改为com.zaxxer.hikari.HikariDataSource。 HikariDataSource 号称 Java WEB 当前速度最快的数据源&#xff0c;相比于传统的 C3…

matlab取出等高线上的数据,在Python或MATLAB中从等高线图中提取数据

这是一个小型的Matlab脚本&#xff0c;可以完成这项工作(使用一些GUI&#xff0c;在图的斜角处读取guidlines)&#xff1a;%// Import the data:imdata importdata(your_picture_file);Gray rgb2gray(imdata.cdata);colorLim [-1 1]; %// this should be set manually%// Ge…

SpringBoot-默认数据源HikariDataSource对数据库操作及自动装配原理

默认数据源HikariDataSource对数据库操作 在创建项目时选择JDBC以及MySQL驱动&#xff0c;让SpringBoot自动装配所需组件 创建完成后默认的pom.xml文件如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

matlab fgetl用法,Matlab fgetl strsplit 函数

函数功能&#xff1a;从文件中调用一行数据matlab中fgetl函数&#xff0c;并除去行末的换行符。语法格式&#xff1a;tline fgetl(fid)fid是通过fopen函数打开文件后得到的一个整型的文件标志。fgetl从这个文件中调用一行数据并丢弃其中的换行符。如果抓取成功tline容纳了调用…

HikariCP源码简洁剖析——HikariDataSource_HikariCP的使用和源码

文章目录HikariDataSource的作用源码剖析核心变量构造方法获取链接实例HikariCP的使用和源码简介HikariCP是什么&#xff1f;HikariCP 解决了哪些问题&#xff1f;为什么要使用 HikariCP&#xff1f;本文要讲什么&#xff1f;如何使用 HikariCP需求项目环境引入依赖编写 hikari…

MySQL如何创建沙箱,沙箱环境搭建 - osc_y8w65yuq的个人空间 - OSCHINA - 中文开源技术交流社区...

[toc]测试环境搭建沙箱环境&#xff1a;-------测试环境搭建基础配置&#xff1a;# 1、在沙箱环境下实名认证&#xff1a;https://openhome.alipay.com/platform/appDaily.htm?tabinfo# 2、电脑网站支付API&#xff1a;https://docs.open.alipay.com/270/105898/# 3、完成RSA密…

PHP单选框实现的方法,jQuery简单实现遍历单选框的方法

本文实例讲述了jQuery简单实现遍历单选框的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、问题背景&#xff1a;有四个单选框&#xff0c;分别为一年四季&#xff0c;现在需要判断是否选中&#xff0c;如果选中这个单选框&#xff0c;就将其值赋值给输入框2、…

java.lang.StringIndexOutOfBoundsException: String index out of range: -1

[2022 中国 DevOps 现状调查全面启动&#xff01;>>> 字符串截取下标越界 java.lang.StringIndexOutOfBoundsException: String index out of range: -1at java.lang.String.substring(String.java:1967)出错代码 result.put("value", valueBuilder.toSt…

matlab 粘连分割代码,【求助】图像中粘连字符切分代码,求注释!!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼% 依然是切分 %MarkMarkabs(I(j1,i)-I(j,i)); % 检测是否通过笔划jj1;endSegY[SegY j-1]; % 第一次切分截止处if (j38)PXR1[PXR1 i];PXR2[PXR2 i];else % 单点粘连SLii;while ((…

java中如何获取项目的路径

记录是为了更好的成长&#xff01; 1、ssm项目中 1.以工程名为TEST为例&#xff1a; (1)得到包含工程名的当前页面全路径&#xff1a;request.getRequestURI() 结果&#xff1a;/TEST/test.jsp (2)得到工程名&#xff1a;request.getContextPath() 结果&#xff1a;/TEST (3…

php用a什么软件来下载,AMQB官方PHP库

AMQB官方PHP库namespace PhpAmqpLib\Channel;use PhpAmqpLib\Exception\AMQPBasicCancelException;use PhpAmqpLib\Exception\AMQPProtocolChannelException;use PhpAmqpLib\Exception\AMQPRuntimeException;use PhpAmqpLib\Message\AMQPMessage;use PhpAmqpLib\Wire\AMQPReade…

String怎么转成BigDecimal_Java.math.BigDecimal类的使用

1.引言 浮点数值不适用于无法接受舍入误差的金融计算中。 例如&#xff0c;命令System.out.prmtln (2.0-1.1)将打印出0.8999999999999999&#xff0c;而不是人们想象的0.9 。 2.0-1.1的运算结果 这种舍入误差的主要原因是浮点数值采用二进制系统表示&#xff0c;而在二进制系统…

loadrunner支持php包吗,Loadrunner自带的WebTours

Loadrunner自带的WebTours发表于&#xff1a;2013-07-28来源&#xff1a;Csdn作者&#xff1a;Ocean-Lee点击数&#xff1a;由于今天花了时间去移动(Loadruner自带的WebTours例子程序)到其他的电脑上&#xff0c;方便练习Loadrunner&#xff0c;偷懒。 很久没有动部署的东西了&…