将字符数组转换为具有 2 个小数位的 float

标签 c floating-point

我定义了这样一个字符数组。

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 个十进制值。

enter image description here

最佳答案

使用 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/

相关文章:

c - Eclipse Kepler 中 undefined reference

c++ - 使用 process_vm_readv 从另一个进程修改整数值

c - 在鼠标事件后重新启动无限循环?

MySQL - 避免截断 float 据类型中的尾随零

c - remquo : argument reduction?

objective-c - iPad 应用程序中的 memset 错误

在 Linux 上确定 clock_gettime 分辨率的正确方法

python - 如何获得最大可能的精度? (Python - 十进制)

sql - 将 SQL FLOAT 转换为 SQL INT,丢失数据

java - Float.intBitsToFloat 如何工作?