我正在尝试将数字转换为英文单词,例如 1234 会变成:“ 1232.4 ”。
我的战术是这样的:
将数字分隔为三,然后finlOutPut
从右到左将它们放在Array()上。
将finlOutPut
三位数字的每个组(数组中的每个单元格)转换为一个单词(此triConvert
函数的作用)。如果所有三个数字均为零,则将它们转换为"dontAddBigSuffix"
从右到左,添加 千,百万,十亿等 。如果finlOutPut
单元格等于"dontAddBigSufix"
(因为只有零),则不要添加单词并将单元格设置为" "
(无)。
看来效果很好,但是我遇到了一些问题,例如19000000 9 ,转换为:“ 一亿九千万 ”。当有几个零时,它将以某种方式“忘记”最后一个数字。
我做错了什么?错误在哪里?为什么它不能完美运行?
<html>
<头>
<meta http-equiv =“ Content-Type” content =“ text / html; charset = utf-8” />
<script type =“ text / javascript”>
函数update(){
var bigNumArry = new Array('','千','百万','十亿','兆','四分之一','五亿');
var output ='';
var numString = document.getElementById('number')。value;
var finlOutPut = new Array();
如果(numString =='0'){
document.getElementById('container')。innerHTML ='零';
返回;
}
如果(numString == 0){
document.getElementById('container')。innerHTML ='messeg告诉输入数字';
返回;
}
var i = numString.length;
i = i-1;
//将数字切成三位数的小样,然后将其添加到Arry中
而(numString.length> 3){
var triDig = new Array(3);
triDig [2] = numString.charAt(numString.length-1);
triDig [1] = numString.charAt(numString.length-2);
triDig [0] = numString.charAt(numString.length-3);
var varToAdd = triDig [0] + triDig [1] + triDig [2];
finlOutPut.push(varToAdd);
一世 - ;
numString = numString.substring(0,numString.length-3);
}
finlOutPut.push(numString);
finlOutPut.reverse();
//将每个三位数的单词转换为英语单词
//如果所有数字均为零,则triConvert
//函数返回字符串“ dontAddBigSufix”
for(j = 0; j <finlOutPut.length; j ++){
finlOutPut [j] = triConvert(parseInt(finlOutPut [j]));
}
var bigScalCntr = 0; //此int标志着一万亿亿美元... Arry
对于(b = finlOutPut.length-1; b> = 0; b--){
如果(finlOutPut [b]!=“ dontAddBigSufix”){
finlOutPut [b] = finlOutPut [b] + bigNumArry [bigScalCntr] +',';
bigScalCntr ++;
}
其他{
//将finlOP [b]处的字符串从“ dontAddBigSufix”替换为空字符串。
finlOutPut [b] ='';
bigScalCntr ++; //提前柜台
}
}
//将输出Arry转换为,更可打印的字符串
for(n = 0; n <finlOutPut.length; n ++){
输出+ = finlOutPut [n];
}
document.getElementById('container')。innerHTML = output; //打印输出
}
//简单的函数,可将数字转换为1到999的单词
函数triConvert(num){
varones = new Array('',``一个'',``两个'',``三个'',``四个'',``五个'',``六个'',``七个'',``八个'',``九个'',``十个'',``十一”,“十二”,“十三”,“十四”,“十五”,“十六”,“十七”,“十八”,“十九”);
var tens = new Array('',``,'二十','三十','四十','五十','六十','七十','八十','九十');
var一百='一百';
var output ='';
var numString = num.toString();
如果(num == 0){
返回'dontAddBigSufix';
}
// 10,11,12,13,.... 19的情况
如果(num <20){
输出=个[数字];
返回输出;
}
// 100以上
如果(numString.length == 3){
输出=个[parseInt(numString.charAt(0))] +百;
输出+ = tens [parseInt(numString.charAt(1))];
输出+ =个[parseInt(numString.charAt(2))];
返回输出;
}
输出+ = tens [parseInt(numString.charAt(0))];
输出+ =个[parseInt(numString.charAt(1))];
返回输出;
}
</ script>
</ head>
<身体>
<input type =“ text”
id =“ number”
大小=“ 70”
onkeyup =“ update();”
/ *此代码可防止非数字字母* /
onkeydown =“ return(event.ctrlKey || event.altKey
|| (47 <event.keyCode && event.keyCode <58 && event.shiftKey == false)
|| (95 <event.keyCode && event.keyCode <106)
|| (event.keyCode == 8)|| (event.keyCode == 9)
|| (event.keyCode> 34 && event.keyCode <40)
|| (event.keyCode == 46))“ />
<br/>
<div id =“ container”>此处打印的数字</ div>
</ body>
</ html>
当前导零数字时,JavaScript会将3个数字的组解析为八进制数字。当三位数字的组全部为零时,无论基数是八进制还是十进制,结果都是相同的。
但是,当您给JavaScript‘009’(或‘008’)时,这是一个无效的八进制数字,因此您会得到零。
如果您经历了从190,000,001到190,000,010的整个数字集,您将看到JavaScript跳过’…,008’和’…,009’,但是为’…,010’发出‘8’。那就是“尤里卡!”
时刻。
更改:
for (j = 0; j < finlOutPut.length; j++) {
finlOutPut[j] = triConvert(parseInt(finlOutPut[j]));
}
至
for (j = 0; j < finlOutPut.length; j++) {
finlOutPut[j] = triConvert(parseInt(finlOutPut[j],10));
}
代码还在每个非零组之后继续添加逗号,因此我玩了一下,找到了添加逗号的正确位置。
旧:
for (b = finlOutPut.length - 1; b >= 0; b--) {
if (finlOutPut[b] != "dontAddBigSufix") {
finlOutPut[b] = finlOutPut[b] + bigNumArry[bigScalCntr] + ' , ';
bigScalCntr++;
}
else {
//replace the string at finlOP[b] from "dontAddBigSufix" to empty String.
finlOutPut[b] = ' ';
bigScalCntr++; //advance the counter
}
}
//convert The output Arry to , more printable string
for(n = 0; n<finlOutPut.length; n++){
output +=finlOutPut[n];
}
新:
for (b = finlOutPut.length - 1; b >= 0; b--) {
if (finlOutPut[b] != "dontAddBigSufix") {
finlOutPut[b] = finlOutPut[b] + bigNumArry[bigScalCntr]; // <<<
bigScalCntr++;
}
else {
//replace the string at finlOP[b] from "dontAddBigSufix" to empty String.
finlOutPut[b] = ' ';
bigScalCntr++; //advance the counter
}
}
//convert The output Arry to , more printable string
var nonzero = false; // <<<
for(n = 0; n<finlOutPut.length; n++){
if (finlOutPut[n] != ' ') { // <<<
if (nonzero) output += ' , '; // <<<
nonzero = true; // <<<
} // <<<
output +=finlOutPut[n];
}
问题内容: 如何在JavaScript中执行以下操作? 将“ 1”,“ 2”,“ 3”连接为“ 123” 将“ 123”转换为123 加123 + 100 = 223 将223转换为“ 223” 问题答案: 您想熟悉和。 在您的工具箱中有用的是查看变量以找出它是什么类型的:
本文向大家介绍使用JavaScript从数字反转数字数组,包括了使用JavaScript从数字反转数字数组的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个带数字的JavaScript函数。我们的函数应该首先反转数字,然后将反转的数字拆分为数字,然后返回该拆分的数字数组。 输入 输出 因为反向编号是7654321 示例 以下是代码- 输出结果
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100
罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,
问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo
请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽