gpt4 book ai didi

javascript - 以 Angular 2 格式化货币输入

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:29 25 4
gpt4 key购买 nike

我想在您键入时将输入格式化为美元货币。输入将有 2 个小数位,并且将从右到左输入。假设如果我输入 54.60,它将输入为 $0.05-->$0.54-->$5.46-->$54.60。这PLUNKER正是这样做的,但它是在 Angular js 中。到目前为止,我的指令看起来像:

import {Directive, Output, EventEmitter} from '@angular/core';
import {NgControl} from '@angular/forms';

@Directive({
selector: '[formControlName][currency]',
host: {
'(ngModelChange)': 'onInputChange($event)',
'(keydown.backspace)':'onInputChange($event.target.value, true)'
}
})
export class CurrencyMask {
constructor(public model: NgControl) {}

@Output() rawChange:EventEmitter<string> = new EventEmitter<string>();

onInputChange(event: any, backspace: any) {
// remove all mask characters (keep only numeric)
var newVal = event.replace(/\D/g, '');
var rawValue = newVal;
var str = (newVal=='0'?'0.0':newVal).split('.');
str[1] = str[1] || '0';
newVal= str[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') + '.' + (str[1].length==1?str[1]+'0':str[1]);



// set the new value
this.model.valueAccessor.writeValue(newVal);
this.rawChange.emit(rawValue)
}
}

在 html 中它被用作:

<input  name="cost" placeholder="cost" class="form-control"  type="text" currency formControlName="cost" (rawChange)="rawCurrency=$event">

更新:

最终对我有用的是:

onInputChange(event: any, backspace: any) {
var newVal = (parseInt(event.replace(/[^0-9]/g, ''))/100).toLocaleString('en-US', { minimumFractionDigits: 2 });
var rawValue = newVal;

if(backspace) {
newVal = newVal.substring(0, newVal.length - 1);
}

if(newVal.length == 0) {
newVal = '';
}
else {
newVal = newVal;
}
// set the new value
this.model.valueAccessor.writeValue(newVal);
this.rawChange.emit(rawValue)
}

最佳答案

在输入更改时使用以下内容

// remove dot and comma's, 123,456.78 -> 12345678
var strVal = myVal.replace(/\.,/g,'');
// change string to integer
var intVal = parseInt(strVal);
// divide by 100 to get 0.05 when pressing 5
var decVal = intVal / 100;
// format value to en-US locale
var newVal = decVal.toLocaleString('en-US', { minimumFractionDigits: 2 });

// or in singel line
var newVal = (parseInt(myVal.replace(/\.,/g, '')) / 100).toLocaleString('en-US', { minimumFractionDigits: 2 });

仅使用货币管道格式化为美元格式

var newVal = (parseInt(myVal.replace(/\.,/g, '')) / 100)

希望这对您有所帮助。

关于javascript - 以 Angular 2 格式化货币输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42092146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com