微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数

简介: 微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数

微信和支付宝支付的金额不能是超过两位小数。

可以把后台超过两位小数的支付字符串修正为两位小数


-(NSString *)modifyWithStr:(NSString *)str
{
    if(isCommonUnitEmptyString(str))
    {
        return @"";
    }
    
    NSInteger flag = 0;//0开始,没有找到值;1找到值但是没有找全值;2找全值,在找剩余右边的字符串
    NSString *actualAmountStr = @"";
    NSString *actualAmountValueStr = @"";
    NSString *rightStr = @"";
    NSString *newStr = @"";
    if(!isCommonUnitEmpty(str) && str.length > 8)
    {
        for(NSInteger n =0; n < str.length; n++)
        {
            NSString *str1 = [str substringWithRange:NSMakeRange(n, 1)];
            if(!isCommonUnitEmptyString(str1))
            {
                if(0 == flag)
                {
                    if([str1 isEqualToString:@"="])
                    {
                        flag = 1;
                    }
                    actualAmountStr = [NSString stringWithFormat:@"%@%@", actualAmountStr, str1];
                }
                else if(1 == flag)
                {
                    if([str1 isEqualToString:@"&"])
                    {
                        rightStr = @"&";
                        flag = 2;
                    }
                    else
                    {
                        actualAmountValueStr = [NSString stringWithFormat:@"%@%@", actualAmountValueStr, str1];
                    }
                }
                else
                {
                    rightStr = [NSString stringWithFormat:@"%@%@", rightStr, str1];
                }
            }
            else
            {
                break;
            }
        }
        if(2 ==flag)
        {
            CGFloat actualAmountValue = [actualAmountValueStr floatValue] +0.005;
            newStr = [NSString stringWithFormat:@"%@%.2f%@", actualAmountStr, actualAmountValue,rightStr];
        }
    }
    return newStr;
}

//判断是否为空
static inline BOOL isCommonUnitEmpty(id thing) {
    return thing == nil ||
    ([thing isEqual:[NSNull null]]) ||
    ([thing respondsToSelector:@selector(length)] && [(NSData *)thing length] == 0) || [([NSString stringWithFormat:@"%@", thing]) isEqualToString:@"<null>"] ||
    ([thing respondsToSelector:@selector(count)]  && [(NSArray *)thing count] == 0);
}

测试代码片段

    NSString *str = @"?actualAmount=0.009&amount=0.01&id=2185";
    str = [self modifyWithStr:str];
目录
相关文章
|
2月前
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
65 0
微信H5支付--微信JS-SDK支付--点金计划
|
2月前
|
Web App开发 移动开发 前端开发
H5微信外支付(移动端浏览器)
H5微信外支付(移动端浏览器)
41 0
 H5微信外支付(移动端浏览器)
|
4月前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
5月前
|
开发框架 移动开发 JSON
利用微信公众号实现商品的展示和支付(1)
利用微信公众号实现商品的展示和支付(1)
|
4月前
|
移动开发 前端开发 JavaScript
|
5月前
|
安全 API Windows
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
|
5月前
|
存储 开发框架 JavaScript
利用微信公众号实现商品的展示和支付(2)
利用微信公众号实现商品的展示和支付(2)
|
5月前
|
JavaScript
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
|
5月前
|
API
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
|
5月前
|
前端开发
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单