Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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 为什么我的textarea(HTML)值显示为12000000.11,但在parseFloat之后该值仅为12?_Javascript_Html_Decimal_Comma_Parsefloat - Fatal编程技术网

Javascript 为什么我的textarea(HTML)值显示为12000000.11,但在parseFloat之后该值仅为12?

Javascript 为什么我的textarea(HTML)值显示为12000000.11,但在parseFloat之后该值仅为12?,javascript,html,decimal,comma,parsefloat,Javascript,Html,Decimal,Comma,Parsefloat,我正在尝试开发一个转换网站,该网站采用数字值: 1,200.12 or 1.200,12 or 1200.12 or 1200,12 and have them all interpreted as 1200.12 by parseFloat. I would also like decimals to be able to be interpreted. 0.123 or 0,123 as 0.123 通过文本区域,然后解析浮点数以执行计算。 以下是我得

我正在尝试开发一个转换网站,该网站采用数字值:

 1,200.12
 or
 1.200,12
 or
 1200.12
 or
 1200,12
 and have them all interpreted as 1200.12 by parseFloat.

 I would also like decimals to be able to be interpreted.
 0.123
 or
 0,123     
 as 0.123
通过文本区域,然后解析浮点数以执行计算。 以下是我得到的结果:

textarea input = 12,000.12
value after parseFloat = 12
parseFloat不识别数字的格式吗? 我在以下方面得到了相同的结果:

textarea input: 12.000,12
value after parseFloat = 12
我如何解决这个问题?似乎我需要去掉逗号,因为parseFloat的读数不超过它们,而使用欧洲符号去掉小数,并将逗号改为十进制,以便parseFloat正确读取输入。有没有办法解决这个问题?我的猜测是,我需要将字符串输入标识为欧洲或美国十进制符号,然后执行所需的操作来为parseFloat准备字符串。我将如何实现这一目标?感谢所有捐款。使用HTML5和Javascript。这是我的第一个网站,所以请放心

最好的, 反相

感谢所有贡献者!到目前为止,所有的投入都是甜蜜的。我不认为我们能够使用一个replace语句来正确地去除欧洲和美国的符号,所以我认为我应该以某种方式使用REGEX来确定符号,然后分解成一个if-else语句来对每个符号执行单独的replace函数

var input, trim;
input = "1.234,56"   //string from textarea on page
if(/REGEX that determines American Notation/.test(input){ 
   trim =  input.replace(/\,/,"");//removes commas and leaves decimal point);
}
else(/REGEX that determine European Notation/.test(input)/){ //would qualify input here
   rep = input.replace(/\./,"");//removes all decimal points);
   trim = rep.replace(/\,/,"."//changes the remaining comma to a decimal);
}
//now either notation should be in the appropriate form to parse
number = parseFloat(trim);
使用正则表达式可以这样做吗?请看我的另一个问题。
一种方法是去掉逗号符号,例如:

.replace(",", "")
从那里你应该可以分析浮动


使用fiddle更新:

一种方法是去除逗号符号,例如:

.replace(",", "")
从那里你应该可以分析浮动

用小提琴更新:

parseFloat解析它的参数,一个字符串,并返回一个浮点 数字如果遇到符号(+或-)以外的字符, 数字(0-9)、小数点或指数,返回值 直到那个时候,忽略了那个角色和所有的成功 人物。允许使用前导空格和尾随空格

从良好的MDN网络:

因此这是
parseFloat

parseFloat解析它的参数,一个字符串,并返回一个浮点 数字如果遇到符号(+或-)以外的字符, 数字(0-9)、小数点或指数,返回值 直到那个时候,忽略了那个角色和所有的成功 人物。允许使用前导空格和尾随空格

从良好的MDN网络:


因此,这是parseFloat的预期行为这里有一个解决方案,它使用正则表达式消除所有逗号和句点,最后一个除外

var number = "1,234.567.890";
var replaced = number.replace(/,|\.(?=.*\.)/g, "");
var result = parseFloat(replaced);
// result === 1234567.89
var number = "12.345,67";
var replaced = number.replace(/[.,](?=.*[.,])/g, "").replace(",", ".");
var result = parseFloat(replaced);
// result === 12345.67
或者,您也可以使用它,它将逗号和句点等同对待,并忽略除最后一个以外的所有逗号和句点

var number = "1,234.567.890";
var replaced = number.replace(/,|\.(?=.*\.)/g, "");
var result = parseFloat(replaced);
// result === 1234567.89
var number = "12.345,67";
var replaced = number.replace(/[.,](?=.*[.,])/g, "").replace(",", ".");
var result = parseFloat(replaced);
// result === 12345.67

这是一个使用正则表达式消除所有逗号和句点(最后一个除外)的解决方案

var number = "1,234.567.890";
var replaced = number.replace(/,|\.(?=.*\.)/g, "");
var result = parseFloat(replaced);
// result === 1234567.89
var number = "12.345,67";
var replaced = number.replace(/[.,](?=.*[.,])/g, "").replace(",", ".");
var result = parseFloat(replaced);
// result === 12345.67
或者,您也可以使用它,它将逗号和句点等同对待,并忽略除最后一个以外的所有逗号和句点

var number = "1,234.567.890";
var replaced = number.replace(/,|\.(?=.*\.)/g, "");
var result = parseFloat(replaced);
// result === 1234567.89
var number = "12.345,67";
var replaced = number.replace(/[.,](?=.*[.,])/g, "").replace(",", ".");
var result = parseFloat(replaced);
// result === 12345.67

“1234”是一个4位数的整数,还是一个十进制数?是否知道它总是2位小数?如果是这样的话,你可以把绳子的末端切成薄片,去掉剩下的部分,然后从那里开始it@recursive不是…就是…我希望能够获取以任何格式1234 1234 1.234(EUnotation)输入的数字,并为parseFloat做准备。@Svedin我希望它们最多能够输入5位小数。用于将度量长度从公制转换为英制standard@RyanPaceSloan:但是您希望如何准备号码?如果用户输入“1234”,程序的正确输出是什么?你认为整数是正确的还是十进制的?还是允许程序选择它喜欢的?1234是一个4位数的整数,还是一个小数?是否知道它总是2个小数?如果是这样的话,你可以把绳子的末端切成薄片,去掉剩下的部分,然后从那里开始it@recursive不是…就是…我希望能够获取以任何格式1234 1234 1.234(EUnotation)输入的数字,并为parseFloat做准备。@Svedin我希望它们最多能够输入5位小数。用于将度量长度从公制转换为英制standard@RyanPaceSloan:但是您希望如何准备号码?如果用户输入“1234”,程序的正确输出是什么?你认为整数是正确的还是十进制的?或者允许程序选择它喜欢的任何一个?这仍然存在输入问题,如1.234.567。如果替换除一个以外的所有句点,它将工作。这将适用于美国符号1234.00,因为小数将留待parseFloat解释。但是,如果使用欧洲符号1.234,00,它将替换小数点并保留第一个句点。parseFloat将根据gillesc所说的内容将1234解释为1.00。我明白了,我可能误解了这个问题,或者在我回答这个问题时它还没有完全更新。如果您确定存在十进制值@recursive,则使用regexThat可以给出一个很好的答案,它仍然存在输入问题,例如1.234.567,如果您替换除一个句点之外的所有句点,它将起作用。这将适用于美国符号1234.00,因为十进制将留待parseFloat解释。但是,如果使用欧洲符号1.234,00,它将替换小数点并保留第一个句点。parseFloat将根据gillesc所说的内容将1234解释为1.00。我明白了,我可能误解了这个问题,或者在我回答这个问题时它还没有完全更新。如果您确定@recursive有一个十进制值,那么使用regex给出了一个很好的答案。如果最后一个句点是逗号呢?ie 1.234,56它会把它改成十进制吗?这太棒了!它完全符合美国的符号。但在欧洲,它将12.345,67解释为12.34567,而不是12345.67。有什么想法吗?谢谢你对这项事业的贡献!