Form格式化数字、金额

在form界面我们要想格式化一个数字行如:123456.03的话,我们可以把这个Item的属性

成这样

clip_image002

原数字

Format Mask

结果

说明

123456.03

FM999,990

FM999,990.00

 

0.123

FM999,999.00

.12

小数点前是9

0.123

FM999,990.00

0.12

小数点前是0

123456789.03

FM999,990.00

######

因为Format Mask的个数不够

123456789.03

FM999,999,990.00

123,456,789.03

 

在to_char中to_char(A,B)

A

B

结果

说明

0.123

FM999,999.00

.123

小数点前是9

0.123

FM999,990.00

0.123

小数点前是0

金额的格式输入不应该用上面的方法,因为不同种类币种的格式掩码是不一样的,例如:币种为‘CNY’时金额保留两位小数,币种为‘BHD’时显示三位小数,有两种方法可以实现:

(1) 用代码根据币种动态控制格式掩码

设需要格式化的块为TEST,Item为AMOUNT,在块TEST的Post-query里加入如下代码:

APP_ITEM_PROPERTY.SET_PROPERTY('TEST.AMOUNT', --需要格式化的Item

FORMAT_MASK,

FND_CURRENCY.GET_FORMAT_MASK(

/*格式化用的币种,如果想用本位币可以这样取得

Select currency_code

Into l_currency_code

From gl_sets_of_books

Where set_of_books_id = fnd_profile(‘GL_SET_OF_BOOKS_ID’);

*/

‘USD’,

GET_ITEM_PROPERTY('TEST.AMOUNT', --返回Item的长度

MAX_LENGTH)));

这种方法简单,但如果是一个块显示为多行数据,每行的币种不同的话,就不起作用了。

(2) 用函数APP_CURRENCY.Line_Dyn_Currency实现,这种方法可以实现多行不同币种的格式化

具体方法如下:

设需要格式化的块为TEST,Item为AMOUNT,每行的币种为Item CURRENCY_CODE在数据块中新建一个非数据库描述字段DESC,AMOUNT不显示,显示DESC,在块TEST的post-query里加入如下代码:

:TEST.DESC := TEST.DESC;

APP_CURRENCY.Line_Dyn_Currency(:TEST.CURRENCY_CODE, 'TEST.AMOUNT', 'TEST.DESC', 'POST-QUERY');

在Item:DESC的WHEN-VALIDATE-ITEM里添加如下代码:

APP_CURRENCY.Line_Dyn_Currency(:TEST.CURRENCY_CODE, 'TEST.AMOUNT',

'TEST.DESC', 'WHEN-VALIDATE-ITEM');

它的作用是当DESC改变之后重新设置。

当然这种方法也有它的缺限,在块上查询之后用户没有操作,当前块的状态变成‘CHANGED’因显示AMOUNT时函数会APP_CURRENCY.Line_Dyn_Currency对AMOUNT重新赋值。解决以上问题,可以在块TEST的 post-query里加 APP_RECORD.SET_STATUS('QUERY'),把块的状态改回来。

在Vue.js和Ant Design(AntD)中,你可以使用`<InputNumber>`组件结合自定义的方法来实现数字输入框的金额格式化和去格式化功能,并在表单提交时保持原始数值。 首先,安装AntD的InputNumber插件: ```bash npm install @ant-design/components ``` 然后,在Vue组件里,设置`onFocus`和`onBlur`事件处理函数,分别在聚焦和失焦时格式化和去格式化金额: ```html <template> <div> <a-input-number v-model.number="unformattedValue" :formatter="formatAmount" :parser="parseAmount" ref="inputNumber" ></a-input-number> <button @click="submitForm">提交</button> </div> </template> <script> export default { data() { return { unformattedValue: '', // 原始未格式化的数值 }; }, methods: { formatAmount(value) { // 格式化金额,例如:将数值转换为人民币格式(千位分隔符) return value.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); }, parseAmount(value) { // 去格式化金额,恢复到原始数值格式 return parseFloat(value.replace(/,/g, '')); }, submitForm() { // 提交表单时使用原始未格式化的值 const formattedValue = this.formatAmount(this.unformattedValue); console.log('提交:', formattedValue); // 发送或保存格式化后的值 // 如果需要在后端直接接收原始值,可以使用ref对象获取当前值 this.$refs.inputNumber.$emit('input', this.unformattedValue); }, }, }; </script> ``` 当用户输入时,输入框会自动应用格式化;而在提交表单时,通过`parseAmount`方法还原成原始数值并发送。注意这里我们使用了`v-model.number`绑定,确保输入的是数值类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值