「数値型の計算誤差」の版間の差分
38行目: | 38行目: | ||
{ | { | ||
print(“二値は等しいと認められました”); | print(“二値は等しいと認められました”); | ||
} | |||
==一度整数にした後で変換する== | |||
他の方法は、例えば一度整数にしてから計算する方法もあります。 | |||
import “Alice.Math”; | |||
///与えられた数の小数点以下の桁数を取得します | |||
function GetDisitsUnder1(number num) | |||
{ | |||
var priceString = price.ToString().TrimEnd('0'); | |||
int index = priceString.IndexOf('.'); | |||
if (index == -1){return 0;} | |||
return priceString.Substring(index + 1).Length; | |||
} | |||
///二つの小数が等しいかどうかを判断します | |||
function NumEqual(number numA,numbner numB) | |||
{ | |||
//numA,numBの小数点以下の桁数(すなわち、10の何乗倍すれば整数になるか) | |||
var nAd = GetDisitsUnder1(numA); | |||
var nBd = GetDisitsUnder1(numB); | |||
//二つの小数の小数点以下桁数のうち多い方 | |||
var dis = math_max(nAd,nBd); | |||
//numA,numBを整数化したもの | |||
var rA = numA * (dis ** 10); | |||
var rB = numB * (dis ** 10); | |||
return (rA == rB); | |||
} | |||
///二つの小数の和を求めます | |||
function Sum(number numA,number numB) | |||
{ | |||
//numA,numBの小数点以下の桁数(すなわち、10の何乗倍すれば整数になるか) | |||
var nAd = GetDisitsUnder1(numA); | |||
var nBd = GetDisitsUnder1(numB); | |||
//二つの小数の小数点以下桁数のうち多い方 | |||
var dis = math_max(nAd,nBd); | |||
//numA,numBを整数化したもの | |||
var rA = numA * (dis ** 10); | |||
var rB = numB * (dis ** 10); | |||
//整数化されたものの計算結果 | |||
var result = rA + rB; | |||
return (result / (dis ** 10)); | |||
} | } |