找回密码
 立即注册

QQ登录

只需一步,快速开始

CainduranceTX
中级会员   /  发表于:2023-10-9 10:33  /   查看:2371  /  回复:8
50金币
本帖最后由 CainduranceTX 于 2023-10-9 11:03 编辑



image.png965829772.png
如图,上图的达表示结算的结果为空时,如何让红框里显示数字0,让黄框里不显示内容。
红框里的表达式为:{Sum(大病支付, "大病保险明细门诊")}
黄框里的表达式为:{Code.ConvertToCNYText(Sum(大病支付, "大病保险明细门诊"))}   用的是自定义的小写转汉字大写的函数,论坛抄的,函数如下:


/// <function name="ConvertToCNYText">
/// <culture>
/// <label>ConvertToCNYText</label>
/// <syntax>ConvertToCNYText(string inputString)</syntax>
/// <description>自动转换中文单位</description>
/// <example>ConvertToCNYText("100") = 壹佰元整
/// </example>
/// </culture>
/// </function>
///
public string ConvertToCNYText(string inputString)
{
    try
    {
        string numList = "零壹贰叁肆伍陆柒捌玖";
        string rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万";
        double number = 0;
        string tempOutString = "";
        number = double.Parse(inputString);




        string tempNumberString = Convert.ToInt64(number * 100).ToString();
        int tempNmberLength = tempNumberString.Length;
        int i = 0;


        while (i < tempNmberLength)
        {
            int oneNumber = Int32.Parse(tempNumberString.Substring(i, 1));
            string oneNumberChar = numList.Substring(oneNumber, 1);
            string oneNumberUnit = rmbList.Substring(tempNmberLength - i - 1, 1);
            if (!(oneNumberChar == "零"))
                tempOutString += oneNumberChar + oneNumberUnit;
            else
            {
                if (oneNumberUnit == "亿" || oneNumberUnit == "万" || oneNumberUnit == "元" || oneNumberUnit == "零")
                {
                    while (tempOutString.EndsWith("零"))
                        tempOutString = tempOutString.Substring(0, tempOutString.Length - 1);
                }
                if (oneNumberUnit == "亿" || (oneNumberUnit == "万" && !tempOutString.EndsWith("亿")) || oneNumberUnit == "元")
                    tempOutString += oneNumberUnit;
                else if (tempOutString != null)
                {
                    bool tempEnd = tempOutString.EndsWith("亿");
                    bool zeroEnd = tempOutString.EndsWith("零");
                    if (tempOutString.Length > 1)
                    {
                        bool zeroStart = tempOutString.Substring(tempOutString.Length - 2, 2).StartsWith("零");
                        if (!zeroEnd && (zeroStart || !tempEnd))
                            tempOutString += oneNumberChar;
                    }
                    else if (!zeroEnd && !tempEnd)
                        tempOutString += oneNumberChar;
                }
            }
            i += 1;
        }
        if (tempOutString != null)
        {
            while (tempOutString.EndsWith("零"))
                tempOutString = tempOutString.Substring(0, tempOutString.Length - 1);
            while (tempOutString.EndsWith("元"))
                tempOutString = tempOutString + "整";
            return tempOutString;
        }
    }
    catch (Exception ex)
    {
        return "#数值转换错误" + ex.Message;
    }
    return String.Empty;
}




/// <function name="UserFunction">
/// <culture>
/// <label>UserFunction</label>
/// <syntax>UserFunction(&lt;ArgumentName&gt;)</syntax>
/// <description>自定义函数描述</description>
/// <example>Code.UserFunction("ArgumentValue")</example>
/// </culture>
/// </function>
public string UserFunction(string argumentName)
{
    return argumentName;
}
image.png861083373.png

最佳答案

查看完整内容

您好,您的问题描述如下,您看看: 问题描述:报表的空值显示0,使用自定义函数转换大小写的值若转换错误,显示空白 问题解答: 这2个问题都需要使用IIF函数来判断,IIF函数语法:{IIF(表达式,true,false)}

8 个回复

倒序浏览
最佳答案
最佳答案
Bella.YuanWyn认证
超级版主   /  发表于:2023-10-9 10:33:20
来自 3#
您好,您的问题描述如下,您看看:

问题描述:报表的空值显示0,使用自定义函数转换大小写的值若转换错误,显示空白

问题解答:
       这2个问题都需要使用IIF函数来判断,IIF函数语法:{IIF(表达式,true,false)}
  1. 空值显示0,表达式如下,您修改Sum(count)为您的字段:{IIF(IsNothing(Sum(count)), 0, Sum(count))}
复制代码
  1. 空值显示0,表达式如下,您修改count为您的字段:{IIF(IsNumeric(count), Code.ConvertToCNYText(count), "")}
复制代码
image.png878123168.png
回复 使用道具 举报
CainduranceTX
中级会员   /  发表于:2023-10-9 10:39:49
2#
本帖最后由 CainduranceTX 于 2023-10-9 10:42 编辑

搞不定啊搞不定
回复 使用道具 举报
CainduranceTX
中级会员   /  发表于:2023-10-9 12:29:04
4#
Bella.Yuan 发表于 2023-10-9 12:12
您好,您的问题描述如下,您看看:

问题描述:报表的空值显示0,使用自定义函数转换大小写的值若转换错 ...

我上午也是用iff,但是我用的很死板。。。一直不生效。下午用您的方法试试,辛苦老板了。
回复 使用道具 举报
Bella.YuanWyn认证
超级版主   /  发表于:2023-10-9 13:49:50
5#
CainduranceTX 发表于 2023-10-9 12:29
我上午也是用iff,但是我用的很死板。。。一直不生效。下午用您的方法试试,辛苦老板了。

您参考我上面的回复在测试看看,如果还是有问题您记得追贴描述一下,我们在具体看看。
回复 使用道具 举报
CainduranceTX
中级会员   /  发表于:2023-10-10 11:45:57
6#
Bella.Yuan 发表于 2023-10-9 13:49
您参考我上面的回复在测试看看,如果还是有问题您记得追贴描述一下,我们在具体看看。

{IIF(IsNothing(Sum(count)), 0, Sum(count))}
这个代码我代入自己的函数后是这样:
{IIF(IsNothing(Sum(大病支付, "大病保险明细门诊")), 0, Sum(大病支付, "大病保险明细门诊"))}

能够实现没有数据的时候显示“0”,但是出现一个新的问题,没有改之前设置的格式是n2,按需求只显示小数点后2位,改了语句以后,设置n2的格式,不生效了,数据的显示格式不受控制了,会显示小数点后很多很多很多位。
回复 使用道具 举报
Eden.SunWyn认证
超级版主   /  发表于:2023-10-10 15:13:04
7#
CainduranceTX 发表于 2023-10-10 11:45
{IIF(IsNothing(Sum(count)), 0, Sum(count))}
这个代码我代入自己的函数后是这样:
{IIF(IsNothing(Su ...

您这样写试试,通过数据格式化来设置格式:
{IIF(IsNothing(Sum(大病支付, "大病保险明细门诊")), 0, Format(Sum(大病支付, "大病保险明细门诊"), "n2"))}

回复 使用道具 举报
CainduranceTX
中级会员   /  发表于:2023-10-10 15:35:13
8#
Eden.Sun 发表于 2023-10-10 15:13
您这样写试试,通过数据格式化来设置格式:
{IIF(IsNothing(Sum(大病支付, "大病保险明细门诊")), 0, Fo ...

试了下,您的语句非常完美,多谢老板指教
回复 使用道具 举报
Eden.SunWyn认证
超级版主   /  发表于:2023-10-10 15:47:58
9#
CainduranceTX 发表于 2023-10-10 15:35
试了下,您的语句非常完美,多谢老板指教

不客气,有新的问题,您在开新帖解决哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部