作者duv (duv)
看板C_and_CPP
标题Re: [语法] 在写程式时 遇到将浮点数转换成整数的问题
时间Tue Sep 15 22:54:04 2009
那1.850公里减掉基本运费的里程数(1.5公里)为
1.85-1.5=0.35(公里)
又因为每0.3公里加收五元(不足0.3公里以0.3公里计)
而(0.35/0.3)*5=1.1666666..
.
这里是 1.1666666个 0.3公里,他确实>=1,因此满足`0.3公里的条件`
1.16666...*5= 5.83333333(元)
这样会使得总运费只有70+5.83333333= 75.83333333
舍去小数得到的只是75元
根本就严重计算错误
本来就应该是75.833了不是?
并不是 因为原来的题目(见上)有说 不足0.3公里 要自动算成是0.3公里
所以此时的总车资应该要是70+5*2=80(元)
正确算法应该是遇到
0.35/0.3=1.1666666...小数点後面有小数时
就要无条件进位让1.1666666....变成2
原题目你所po的部份没有显示这玩意啊,你应该只是为了反驳而写这个解释吧
我并没有因为为了反驳而写这个解释....
原来的题目
"超过1.5公里後, 每0.3公里, 加收5元 (不足0.3公里, 仍以0.3公里计)"
而为了满足题目所求
我先宣告一个整数int t;
这个t=(y-1.5)/0.3;
假定y=1.850 则t此时原应等於(1.850-1.5)=0.350/0.3=1.166666...
=>但由於取整数的关系 t会变成无条件舍去 值只等於1
原本是应该要无条件进位的 但变成无条件舍去
t的值会相差1
而这个情况只要y-1.5之後的值不能整除0.3 都会发生
但相对的 这个情况只要y-1.5之後的值能整除0.3 就不会发生
(ex: y=2.70 => y-1.5=2.7-1.5=1.2 => (y-1.5)/0.3=4)
所以我後面才设计了一个if选择 以判断情况是哪种:
if(0.3*(t+1.5)==y)
但我这边写错了 很抱歉
我应该要写的是:
if(0.3*t+1.5==y)
举例来说 像上面的y=1.850的情况 其对应的t=1
则此时if(0.3*t+1.5==y)式子中的等号左边是 0.3*1+1.5=1.8 就不等於y=1.850
就会进入else的部分
z=(y-1.5)/0.3;
w=70+5*(z+1);
其中的z,w是整数int
此时z=(1.850-1.5)/0.3=1.16666=>1
w=70+5*(1+1)=80 ...+1是为了要达到阶梯式进位的效果
※ 编辑: duv 来自: 140.119.143.103 (09/15 22:58)
1F:推 sunneo:了解 ^^" 09/15 23:29