我定义了这样一个字符数组。
char pkgamount[20]="";
这可以由 120、-120、-120.23 等值填充(最多 2 位小数)
我目前像这样将 char 数组转换为整数。
int amt2;
sscanf(pkgamount, "%d", &amt2);
将可以包含负小数的字符数组转换为只有 2 位小数的浮点值的正确方法是什么?
更新:#1
我从数据库 (VARCHAR) 读取值到字符数组。这些值最多有 2 位小数。该值可以是 0/有 2 位小数/没有小数位。我认为整数数据类型不能有小数位。我需要添加/减去这些值。所以我需要将字符数组转换为 float 。
更新 #2
我尝试使用 float 并不断得到一些随机输出。请提取下面的代码
float bamt1,bamt2,amt1,amt2;
float balance1,balance2;
sscanf(stbamount, "%f", &amt1);
sscanf(pkgamount, "%f", &amt2);
//amoun1=32 amount2=23 any decimal or non decimal values..using API
//Using API on device to read this..skipping the code for that
sscanf(amount1, "%f", &bamt1);
sscanf(amount2, "%f", &bamt2);
balance1=amt1-bamt1;
balance2=amt2-bamt2;
// buffers used for conversion and printing
char buf1[sizeof(int)*3+2]="";
snprintf(buf1, sizeof buf1, "%f", balance1);
char buf2[sizeof(int)*3+2]="";
char sbal[20]="";
char pbal[20]="";
strcat(sbal,"STB Balance: ");
strcat(pbal,"PKG Balance: ");
strcat(sbal,buf1);
strcat(pbal,buf2);
//prn_write_text is API Call to run thermal printer on device
prn_write_text(sbal,strlen(sbal),1);
prn_write_text(pbal,strlen(pbal),1);
snprintf(buf2, sizeof buf2, "%f", balance2);
更新 #3
这是使用热敏打印机写入一些文本的 API 调用。我需要将浮点值转换为字符串并将其剪切,以便它只包含 2 个十进制值。
最佳答案
使用 float 来存储数字..
float amtf;
sscanf(pkgamount, "%f", &amtf);
将数字打印到小数点后两位
printf (".2%f",amtf);
只要您愿意在加法或减法过程中容忍可能出现 0.01 的误差,就可以使用 float 来存储数字。它使代码更容易。
但是,如果您绝对必须精确到最后的 0.00,那么您应该按照 M Oehem 的建议使用整数 * 100 来存储数据。
关于将字符数组转换为具有 2 个小数位的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077757/