我有一个古怪的问题,如果我输入说720.60
sscanf("%f", &amount);
如果amount为float类型,则变量中的值将更改为720.59967。
我该如何绕过它并防止它改变我的价值?
最佳答案
如果您需要小数点后的固定位数(例如2),则可以使用浮点数代替。
在“。”处分割输入字符串,并将“ 720.60”视为两个整数720和60。将720乘以100,再加上60,得到72060。用百分位数的整数进行所有算术运算。要进行显示,请打印x / 100和x%100,用小数点分隔,第二个数字打印为两位数,可能以零开头。
如果您更喜欢使用浮点类型,则double会比float精确得多。最接近720.60的浮点数是720.5999755859375。最接近的double是720.6000000000000227373675443232059478759765625。如果只在小数点后加两位数字,则两者都将四舍五入为“ 720.60”,但是四舍五入的误差会随着您的算术运算而产生。
关于c - 如何防止float/double格式说明符自动更改C中的十进制值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18781472/