C#从int到double类型转换的问题

usingSystem;classProgram{staticvoidMain(string[]args){doubledb;intit=123;db=123.2432;... using System;

class Program
{
static void Main(string[] args)
{
double db;
int it=123;
db = 123.2432;
Console.WriteLine("db={0},it={1}",db,it);
db = db - it;
Console.WriteLine("db=db-it:{0}",db);
Console.Read();
}
}
为什么123.2432-123运行后成了0.243200000000002,不应该是0.2432吗?
如果不行的话,我该用什么方法把整数部分减掉,也就是把123.2432变成0.2432,希望高手帮忙解答啊...
是不是所有的double类型值与int类型值相运算都会出现这种小“误差”,怎么能避免这种误差啊
double类型不是可以小数点后很多位吗,我只是用到了后面的4位,怎么还会出问题
希望大家说的详细点,本人是一初学者,在这方面实在迷惑
展开
 我来答
avenger19
2008-05-05 · TA获得超过1298个赞
知道小有建树答主
回答量:972
采纳率:0%
帮助的人:1049万
展开全部
这个问题答过好几遍了,今天干脆把原理说出来吧
double是一定会出误差的,你想一想嘛,内存中记的都是0和1,有限位数的二进制数能表示的十进制小数当然有限,作运算的时候精度肯定是不完全精确的.
不管你用几位,一个double在内存中分配的空间都是64位,所以就会出现这种误差,比如一个循环小数在计算机中表示的就是不精确的,是省略了后面N位小数之后的值.具体的你可以查询MSDN :Double structure
解决办法二楼已经说过了.
yizusong
2008-05-05 · TA获得超过3045个赞
知道大有可为答主
回答量:4516
采纳率:0%
帮助的人:4477万
展开全部
Math.Round(你的数,小数点位数)

double就是不精确的类型,你可以用上面的方法使用四舍五入得到你需要的值

至少我试过C++,JAVA,C#都有这种误差

double型就是不精确的!
要避免就用四舍五入,结果和你要的是一样的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skywalker380
2008-05-05 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:118万
展开全部
你可以把double的数值转换成成string,split('.')就可以得到小数部分!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式