您的位置:首页 > 编程语言 > C#

【C#食谱】【风味小吃】菜单1: 判断分数和小数之间是否近似相等

2008-01-12 21:27 465 查看
说明:在看C# CookBook,英文版的,一方面是想自己边看边能够更好的理解,另一方面是想借翻译,也提高下自己的英语水平。 以后想基本上每两天翻译一篇。

至于,适不适合放在首页,我也不是很清楚,如果不合适,还请见谅。 dudu留情:我只是想先测试下,这个系列应不应该在首页出现。

问题:

你需要比较一个分数和一个double或float类型的值,去决定它们是否近似相等。以1/6和0.16666667比较的结果为例。除了0.16666667只精确到小数点后8位,而1/6在小数点后精确到该类型小数最大可能的长度之外,它们看上去是相等的。

解决方法:

要在分数和小数之间比较它们是否近似相等,需要确定它们之间的差是否在允许的范围内:

using System;

// 用System.Double.Epsilon的值重载函数

public static bool IsApproximatelyEqualTo(double numerator,

double denominator,

double dblValue)

// 重载函数,使得可以自己确定一个误差值,而不是用

// System.Double.Epsilon

public static bool IsApproximatelyEqualTo(double numerator,

double denominator,

double dblValue,

double epsilon)

bool Approximate = Class1.IsApproximatelyEqualTo(1, 7, .142857, .0000001);

// Approximate == false

为第三个参数增加一个小数位后,这个函数反映出这个更精确的值就是你需要的1/7的合适的近似值:

bool Approximate = Class1.IsApproximatelyEqualTo(1, 7, .1428571, .0000001);

// Approximate == true

其他参考:

查看MSDN文档中关于Double.Epsilon Field和Single.Epsilon Field主题的相关内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐