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. 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__ ## __Abstract Syntax Tree__

View File

@ -399,8 +399,11 @@ nasal_ref builtin_str(nasal_ref* local,nasal_gc& gc)
nasal_ref val=local[1]; nasal_ref val=local[1];
if(val.type!=vm_num) if(val.type!=vm_num)
return builtin_err("str","\"number\" must be number"); 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); nasal_ref ret=gc.alloc(vm_str);
*ret.str()=std::to_string(val.num()); *ret.str()=tmp;
return ret; return ret;
} }
nasal_ref builtin_size(nasal_ref* local,nasal_gc& gc) 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) if(type==vm_str)
return *str(); return *str();
else if(type==vm_num) 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 ""; return "";
} }
void nasal_ref::print() void nasal_ref::print()

View File

@ -116,15 +116,15 @@ var curve4=func()
} }
var curve5=func(){ var curve5=func(){
for(var i=0;i<=9;i+=1) 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) 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) 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) 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) 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 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"]; 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"];