update num->string algorithm, now the to_string will output strings with no tailing zeros

This commit is contained in:
ValKmjolnir 2022-03-08 13:40:27 +08:00
parent debe32b187
commit 99f595e16f
4 changed files with 16 additions and 8 deletions

View File

@ -811,7 +811,7 @@ Finally i learned `LL(1)` and `LL(k)` and wrote a parser for math formulas in ve
In version 0.17(2019/9/15) 0.18(2019/9/18) 0.19(2019/10/1)i was playing the parser happily and after that i wrote version 1.0.
__This project began at 2019/8/31__.
__This project began at 2019/7/25__.
## __Abstract Syntax Tree__

View File

@ -399,8 +399,11 @@ nasal_ref builtin_str(nasal_ref* local,nasal_gc& gc)
nasal_ref val=local[1];
if(val.type!=vm_num)
return builtin_err("str","\"number\" must be number");
std::string tmp=std::to_string(val.num());
tmp.erase(tmp.find_last_not_of('0')+1,std::string::npos);
tmp.erase(tmp.find_last_not_of('.')+1,std::string::npos);
nasal_ref ret=gc.alloc(vm_str);
*ret.str()=std::to_string(val.num());
*ret.str()=tmp;
return ret;
}
nasal_ref builtin_size(nasal_ref* local,nasal_gc& gc)

View File

@ -312,7 +312,12 @@ std::string nasal_ref::to_string()
if(type==vm_str)
return *str();
else if(type==vm_num)
return std::to_string(num());
{
std::string tmp=std::to_string(num());
tmp.erase(tmp.find_last_not_of('0')+1,std::string::npos);
tmp.erase(tmp.find_last_not_of('.')+1,std::string::npos);
return tmp;
}
return "";
}
void nasal_ref::print()

View File

@ -116,15 +116,15 @@ var curve4=func()
}
var curve5=func(){
for(var i=0;i<=9;i+=1)
println(i,"\e["~split(".",str(i))[0]~"mh \e[0m");
println(i,"\e["~i~"mh \e[0m");
for(var i=30;i<=37;i+=1)
println(i,"\e["~split(".",str(i))[0]~"mh \e[0m");
println(i,"\e["~i~"mh \e[0m");
for(var i=40;i<=47;i+=1)
println(i,"\e["~split(".",str(i))[0]~"mh \e[0m");
println(i,"\e["~i~"mh \e[0m");
for(var i=90;i<=97;i+=1)
println(i,"\e["~split(".",str(i))[0]~"mh \e[0m");
println(i,"\e["~i~"mh \e[0m");
for(var i=100;i<=107;i+=1)
println(i,"\e["~split(".",str(i))[0]~"mh \e[0m");
println(i,"\e["~i~"mh \e[0m");
}
var curve6=func(){
var shadow=["m░\e[0m","m▒\e[0m","m▓\e[0m","m█\e[0m","m▀\e[0m","m▄\e[0m","m▐\e[0m","m▌\e[0m"];