c# 重新认识 Double 浮点型
double test1 = 0;
for (int i = 0; i < 100000000; i++)
{
test1 += 0.0001;
}
请问 test1 的值是几?
答案是:9999.99999919852(本次测试结果)
拿 Decimal 重新测试一次,结果是正确的

下面是测试代码
static void Main(string[] args)
{
Stopwatch sp = new Stopwatch();
sp.Start(); double test1 = ;
for (int i = ; i < ; i++)
{
test1 += 0.0001;
}
sp.Stop();
string str1 = string.Format("double 类型 0.0001 累加10万次 值[{0}] 耗时[{1}]", test1.ToString(), sp.ElapsedMilliseconds.ToString());
Console.WriteLine(str1); sp.Restart();
decimal test2 = ;
for (int i = ; i < ; i++)
{
test2 += Convert.ToDecimal(0.0001);
}
sp.Stop();
string str2 = string.Format("decimal类型 0.0001 累加10万次 值[{0}] 耗时[{1}]", test2.ToString(), sp.ElapsedMilliseconds.ToString());
Console.WriteLine(str2); sp.Restart();
double test5 = ;
for (int i = ; i < ; i++)
{
test5 += 0.5;
}
sp.Stop();
string str3 = string.Format("double 类型 0.5 累加10万次 值[{0}] 耗时[{1}]", test5.ToString(), sp.ElapsedMilliseconds.ToString());
Console.WriteLine(str3); sp.Restart();
double test25 = ;
for (int i = ; i < ; i++)
{
test25 += 0.25;
}
sp.Stop();
string str4 = string.Format("double 类型 0.25 累加10万次 值[{0}] 耗时[{1}]", test5.ToString(), sp.ElapsedMilliseconds.ToString());
Console.WriteLine(str4); sp.Restart();
double test6 = ;
for (int i = ; i < ; i++)
{
test6 += 0.6;
}
sp.Stop();
string str5 = string.Format("double 类型 0.6 累加10万次 值[{0}] 耗时[{1}]", test6.ToString(), sp.ElapsedMilliseconds.ToString());
Console.WriteLine(str5); Console.ReadKey();
}
Decimal 不丢失精度,但是慢
double 丢失精度 ,速度快,对数据要求不严格推荐使用。 1/2n 时,不丢失精度
网上查到的相关文章
float,double等精度丢失问题
c# 重新认识 Double 浮点型的更多相关文章
- 解决java float double 浮点型参与计算失精度
本人前段时间做一个社区电商应用,发现了一个 天坑 ...................让我哭会 . 下面听听我的踩坑之路吧 ,电商肯定跟¥打交道了,计算少不了的.由于本人太菜 单纯的以为 fl ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- iOS-Swift编程
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- java语法基础
Java的基本符号(token) Java的单词符号有五种:关键字.标识符.常量.分隔符和操作符. Java的字符集 Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见 ...
- day04关于MySqL—Android小白的学习笔记
Mysql入门 1. 数据库基本知识(了解) 1.1.数据库介绍 1.1.1.什么是数据库?数据库的作用是什么? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户 ...
- C语言的关键字,标示符以及数据类型
1. 关键字 1> 关键字就是C语言提供的有特殊含义的符号,也叫做“保留字” 2> C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义 auto doub ...
- c中的数据类型、常量、变量
一. 数据 1. 什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文 ...
- Sql与MySQL简单入门
作为过来人,给"新司机"一点建议:运维时需要搭建的生产环境,需尽量保持与测试环境一致:但搭建环境时,又苦于找不到合适的版本怎么办?不用怕,我是一个体贴的人,管杀也管埋(该链接为My ...
- Java中的基本数据类型
什么是基本数据类型 就是我们在编程的时候经常需要用到的数据类型,如整型,浮点型等,把这些数据类型专门拿出来特殊对待,并想象成所谓的“基本类型”. Java中有哪些基本数据类型
随机推荐
- 敏捷开发 and 敏捷测试
名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint: 冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...
- python 解析 配置文件
资料: https://docs.python.org/3/library/configparser.html 环境 python 3.4.4 RawConfigParser方式 example.cf ...
- Confluence5.1 最新版的安装&破解&汉化
转自 博客 http://seanzhou.iteye.com/blog/1287016 亲自基本上按照这个教程装了一遍,成功运行. 1.介绍 Atlassian Confluence(简称Confl ...
- IOS中线程的通信
一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 ...
- 原生 JavaScript 代码和Jquery实现对比
下面就带大家一起看看在 IE 浏览器环境中如果使用原生 JavaScript 代码实现 jQuery 中的功能.如果你打算自己开发一个小的基础框架,可以好好参考一下这些代码的实现. 本文转载:http ...
- IO流--转载
第 1 部分 从输出流中读取 http://www.ibm.com/developerworks/cn/java/j-io1/ 自早期基于浏览器的 applet 和简单应用程序以来,Java 平台已有 ...
- 基于 Quartz 开发企业级任务调度应用--转
Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现.该项目于 2009 ...
- 洛谷P1993 小 K 的农场(查分约束)
/* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ ...
- C#学习第二天
在C#中数据类型大概有两类:值类型和引用类型,需要由定义类型的开发人员决定在什么地方分配一个实例. 值类型和引用类型在使用原理上也有所不同,值类型在使用时是传递或者得到一个值的副本,而引用类型在使用时 ...
- HDU3480
题意:给你n个数,然后让你分成m个集合,每个集合有一个值(最大值减最小值,然后平方),求整个集合的可能最小值. 思路:因为每个集合里的值只和最大和最小值有关,所以很容易想到先排序,然后用DP可求得解, ...