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。有什么想法吗?谢谢你对这项事业的贡献!