【问题标题】:Access Textbox Custom Number Format访问文本框自定义数字格式
【发布时间】:2021-01-28 18:39:12
【问题描述】:

我来自孟加拉国,在孟加拉国,逗号 (,) 用作千位分隔符。我们在 3 位、5 位、7 位之后从右到左使用逗号,例如 9,99999,9999,99,99999,99,9999,99,99,99999,99,99,999。我试图通过文本框格式属性来完成这种格式。当我使用 #,##0 作为格式时,它只能格式化到 5 位数。当数字为 6 位或更高时,它只显示一个逗号,如 456,456,而预期为 4,56,456。我曾尝试使用#,##,##,##0,但它会自动转到#,##0。那么,如何格式化文本框以获得我想要的结果,如下所示?

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    你不能。您必须像这样运行自定义格式:

    TextValue = Format(Fix(Value), Left("##\,##\,##\,##\,##\,##\,", -Int(-(Len(Abs(Fix(Value))) - 2) \ 2) * 4) & "##0")
    

    注意,负值也将被正确格式化,而小数将被截断。

    如果你有小数,附加这些:

    TextValue = Format(Fix(Value), Left("##\,##\,##\,##\,##\,##\,", -Int(-(Len(Abs(Fix(Value))) - 2) \ 2) * 4) & "##0") & LTrim(Str(Abs(CCur(Value)-Fix(Value))))
    

    在表单或报告中用作ControlSource(只读):

    =Format(Fix([Amount]),Left("##\,##\,##\,##\,##\,##\,",-Int(-(Len(Abs(Fix([Amount])))-2)\2)*4) & "##0")
    

    附录

    用值覆盖任何情况:

    1. 大于 1,带或不带小数
    2. 小于 1,正十进制值
    3. 大于-1,负十进制值
    4. 小于 -1,带或不带小数

    需要一个扩展表达式:

    TextValue = Format(Value, ";-") & _
        Format(Abs(Fix(Value)), Left("##\,##\,##\,##\,##\,##\,", -Int(-(Len(CStr(Abs(Fix(Value)))) - 2) \ 2) * 4) & "##0") & _
        IIf(Value - Fix(Value), LTrim(Str(Abs(Value - Fix(Value)))), "")
    
    1. 第一部分控制标志
    2. 第二部分控制整数值
    3. 第三部分控制小数

    这将正确输出整个货币范围内的任何值。

    【讨论】:

    • 我明天会尝试你的答案并反馈。那么,如果我使用这个On_Current 表单和报告事件,它会像规则一样工作吗?
    • 是的。另外,请参阅扩展答案。
    • 在这种情况下,我必须使用另一个文本框来格式化显示结果,对吧?
    • 我可以通过这个来满足我的项目要求。接受答案。感谢您的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多