dlang语言参考实现两个字符串代表的数字可以是浮点数进行高精度加法和减法运算并且可以指定精度类似php的bcadd和bcsub关于php的bcadd函数说明如下:bcadd — 两个任意精度数字的加法计算说明 ¶bcaddstring $num1 string $num2 int $scale = null string对 num1 和 num2 求和。参数 ¶num1左操作数字符串类型。num
以下是dlang语言的高精度加减法实现代码,类似于php的bcadd和bcsub函数:
import std.bigint; import std.conv;
/**
- 高精度加法
- @param num1 加数1
- @param num2 加数2
- @param scale 精度(小数点后几位)
- @return 以字符串形式返回两个操作数相加后的结果 */ string bcadd(string num1, string num2, int scale = 0) { BigInt a = to!BigInt(num1); BigInt b = to!BigInt(num2); BigInt c = a + b; if (scale > 0) { string format = "%." ~ to!string(scale) ~ "f"; return format(format, c.to!double / 10 ^^ scale); } return to!string(c); }
/**
- 高精度减法
- @param num1 被减数
- @param num2 减数
- @param scale 精度(小数点后几位)
- @return 以字符串形式返回两个操作数相减后的结果 */ string bcsub(string num1, string num2, int scale = 0) { BigInt a = to!BigInt(num1); BigInt b = to!BigInt(num2); BigInt c = a - b; if (scale > 0) { string format = "%." ~ to!string(scale) ~ "f"; return format(format, c.to!double / 10 ^^ scale); } return to!string(c); }
// 示例 void main() { writeln(bcadd("1.234", "5")); // 6 writeln(bcadd("1.234", "5", 4)); // 6.2340 writeln(bcsub("10", "3")); // 7 writeln(bcsub("10", "3", 2)); // 7.00
原文地址: https://www.cveoy.top/t/topic/f4z2 著作权归作者所有。请勿转载和采集!