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中有哪些基本数据类型
随机推荐
- lightoj 1063 求割点
题目链接:http://lightoj.com/volume_showproblem.php?problem=1063 #include<cstdio> #include<cstri ...
- centos安装GO
1,下载 go1.5.1.linux-amd64.tar.gz 2,将go解压到/opt,个人喜好罢了[root@localhost ~]# tar -C /opt -xzf ./go1.5.1.li ...
- 安装Wamp后 Apache无法启动的解决方法
安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...
- python urllib2详解及实例
urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件.他以urlopen函数的形式提供了一个非常简单的接口, 这是具有利用不同协议获取URLs的能 ...
- Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法
如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应的配置,不然工程就找不到对应的Info.p ...
- CreateThread函数
当使用CreateProcess调用时,系统将创建一个进程和一个主线程. CreateThread将在主线程的基础上创建一个新线程,大致做例如以下步骤: 1在内核对象中分配一个线程标识/句柄,可供管理 ...
- IOS Dictionary和Model相互转换
// // HYBJSONModel.h // Json2ModelDemo // // Created by huangyibiao on 14-9-15. // Copyright (c) 201 ...
- javascript touch事件
touchstart : 當手指觸摸屏幕時觸發:即使已經有一個手指放在了屏幕上也會觸發. touchmove : 當手指在屏幕上滑動時連續的觸發,在這個事件發生期間,商用preventDefault( ...
- Meth | phpstorm invalid descendent file name
Failed to collect files: Invalid descendent file name "codelog_ddz.\"(]))\",\').txt& ...
- How to load jars residing over NFS in JBossAS7 classpath ? --reference
In this article we will discuss how can we load jars residing over NFS in JBoss AS-7 classpath. In s ...