问题描述

在使用浮点数运算时,常会出现奇怪的错误,比如 (19.90 * 100) = 1989.

解决方式

需要使用BC 高精确度函数库,常用的函数如下:

bcadd

作用: 将二个高精确度数字相加
语法: string bcadd(string left operand, string right operand, int [scale]);
解析:此函数将二个高精确度的数字相加,传入二个字符串,结果亦以字符串返回。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bccomp

作用: 比较二个高精确度数字
语法: int bccomp(string left operand, string right operand, int [scale]);
解析:此函数比较二个高精确度的数字。输入二个字符串,若二个字符串一样大则返回 0;若左边的数字字符串 (left operand) 比右边 (right operand) 的大则返回 +1;若左边的数字字符串比右边的小则返回 -1。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcdiv

作用: 将二个高精确度数字相除。
语法: string bcdiv(string left operand, string right operand, int [scale]);
解析:此函数将二个高精确度的数字相除,传入二个字符串,以左边的数字字符串 (left operand) 除以右边的 (right operand) 数字字符串。结果亦以字符串返回。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcmod

作用: 取得高精确度数字的余数。
语法: string bcpow(string x, string y, int [scale]);
解析:此函数求一高精确度数字 x 的 y 次方。结果亦以字符串返回。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcmul

作用: 将二个高精确度数字相乘。
语法: string bcmul(string left operand, string right operand, int [scale]);
解析:此函数将二个高精确度的数字相乘,传入二个字符串,以左边的数字字符串 (left operand) 乘以右边的 (right operand) 数字字符串。结果亦以字符串返回。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcpow

作用: 求一高精确度数字次方值。
语法: string bcpow(string x, string y, int [scale]);
解析:此函数求一高精确度数字 x 的 y 次方。结果亦以字符串返回。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcscale

作用: 配置程序中所有 BC 函数库的默认小数点位数。
语法: string bcscale(int scale);
解析:配置所有返回值的小数点后所需的位数。之后程序若无特别指定,则依此配置的小数点位数。

bcsqrt

作用: 求一高精确度数字的平方根。
语法: string bcsqrt(string operand, int [scale]);
解析:此函数求一高精确度数字开平方根值。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

bcsub

作用: 将二个高精确度数字相减。
语法: string bcsub(string left operand, string right operand, int [scale]);
解析:此函数将二个高精确度的数字相减,传入二个字符串,以左边的 (left operand) 减去右边的 (right operand) 值。scale 是一个可有可无的选项,表示返回值的小数点后所需的位数。

Last modification:April 2nd, 2019 at 02:15 pm