Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使handleChange方法将用户输入的格式正确设置为所需的范围?_Javascript_Reactjs - Fatal编程技术网

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("");