Javascript 如何使handleChange方法将用户输入的格式正确设置为所需的范围?
我有以下字段,我希望通过基于数据添加前导零和尾随零,将所需输出的格式设置为Javascript 如何使handleChange方法将用户输入的格式正确设置为所需的范围?,javascript,reactjs,Javascript,Reactjs,我有以下字段,我希望通过基于数据添加前导零和尾随零,将所需输出的格式设置为XX.xxxxxx <TextBoxField id="location-latitude-control" title="Required: Latitude" name="location.latitude" value={location.latitude} handleChange={this.handleChange} ha
XX.xxxxxx
<TextBoxField
id="location-latitude-control"
title="Required: Latitude"
name="location.latitude"
value={location.latitude}
handleChange={this.handleChange}
handleBlur={this.handleBlur}
/>
可以使用增加数字的长度。然后使用以获得正确的部分,然后将它们连接起来以获得结果
const numsAfterDot=6;
常量测试=[“7.0”、“12.1234561”、“0.12”、“2.5”、“7”、“123”、“1234”、“123456789”、“-123”];
const answers=tests.map((test)=>{
const absolute=Math.abs(test.toString();
常量hasDecimals=绝对值。包括(“.”);
常量拆分=绝对拆分(“.”);
let start=hasDecimals?split[0]:绝对切片(0,2);
设rest=hasDecimals?拆分[1]。切片(0,numAfterDot):绝对值。切片(2,numAfterDot+2);
start=start.padStart(2,“0”);
rest=rest.padEnd(numafterdot,“0”);
const result=`${start}.${rest}`;
返回测试<0?`-${result}`:结果;
});
控制台日志(应答)
您可以使用Math.pow
和toFixed
let handleChange=(val)=>{
常量len=(+val).toString()长度;
如果(len>1){
常数功率=val>-1?len-2:len-3;
返回“+(val/Math.pow(10,pow)).toFixed(6);
}
返回“0”+(+val).toFixed(6);
};
控制台日志(handleChange(“7.0”)//7
控制台日志(handleChange(“123456789”)//12.345679
控制台日志(handleChange(“12”))//12
控制台日志(handleChange(“1”))//1
控制台日志(handleChange(“-123”)//-12.300000
控制台日志(handleChange(“1234”))//12.340000
这就是我想到的——我相信其他人可以更优雅地这样做
//Convert to string
let valToString = val.toString().split("");
//Trim string to max number of characters
let trimmedVal = valToString.slice(0, 8);
//Find first integer (accounting for negative numbers)
let firstInt = trimmedVal.findIndex((element) => element.match(/^[1-9][0-9]*$/));
//Add a dot after 2nd integer
trimmedVal.splice(firstInt + 2, 0, ".");
//Fill with zeroes as needed
for (let i = trimmedVal.length - firstInt; i < 9; i++) {
trimmedVal.push("0");
}
return trimmedVal.join("");
//转换为字符串
让valToString=val.toString().split(“”);
//将字符串修剪为最大字符数
设trimmedVal=valToString.slice(0,8);
//查找第一个整数(考虑负数)
设firstInt=trimmedVal.findIndex((element)=>element.match(/^[1-9][0-9]*$/);
//在第二个整数后加一个点
trimmedVal.拼接(firstInt+2,0,“.”);
//根据需要填充零
for(设i=trimmedVal.length-firstInt;i<9;i++){
trimmedVal.push(“0”);
}
返回trimmedVal.join(“”);
非常感谢您。你的解决方案非常有效。但我看到了一个问题。当我通过在字段中键入7.0
来测试数据时。它将数据转换为70.000000
,而不是07.000000
。您是否可以将此场景添加到上面的代码段中?我看到另一个问题.12
返回0..120000
而不是00.120000
我看到您已更新了解决方案。非常感谢。除以下情况外,所有情况看起来都不错。当我输入.12
时。我看到的是0..120000
而不是00.120000
@dev101是的,我完全忘记了小数,但我已经更改了代码以考虑到这一点。现在一切都应该很好,不用担心。你帮了大忙!现在一切看起来都很好,除了我刚才注意到的这个。当我输入2.5
时,它将转换为25.000000
,而不是02.500000
。这也可以修复吗?感谢您的回复并提供您的解决方案。它工作得很好。但我看到了一个问题。当我通过在字段中键入7.0
来测试数据时。它将数据转换为0.700000
,而不是07.000000
。另外,.12
返回0.012000
,而不是00.120000
。你有没有办法在上面的片段中介绍这些场景?鲁本斯,谢谢你的解决方案。除以下情况外,所有方案都非常有效:.12
应将其转换为00.120000
7.0
应将其转换为07.000000
"7.0" should convert to "07.000000"
"12.1234561" should convert to "12.123456"
//Convert to string
let valToString = val.toString().split("");
//Trim string to max number of characters
let trimmedVal = valToString.slice(0, 8);
//Find first integer (accounting for negative numbers)
let firstInt = trimmedVal.findIndex((element) => element.match(/^[1-9][0-9]*$/));
//Add a dot after 2nd integer
trimmedVal.splice(firstInt + 2, 0, ".");
//Fill with zeroes as needed
for (let i = trimmedVal.length - firstInt; i < 9; i++) {
trimmedVal.push("0");
}
return trimmedVal.join("");