我正在寻找一种方法将double格式化为符合此规则的字符串:
编码应包含 十进制尾数 ,可选地后跟 十进制指数 。
十进制尾数 包含一个可选的加号“+”或减号“ - ”,后跟一个或多个数字的序列,后跟一个完整的数字 停止“。”,然后是一个零或更多位的序列。
小数指数 由拉丁大写字母E组成,可选地后跟加号 签署“+”或减号“ - ”,后跟一个或多个数字。
Valid expressions: +0.0E0 0.0E0 1.5 32.178E+02 0.25E8 0.E25 2. 5.0 Invalid expressions: Problem: 1.2E3. Decimal point not allowed in exponent 1E05 Decimal point required in mantissa 1,000.00 Comma not allowed 3.E Digit(s) required in exponent .5 At least one digit must precede the decimal point 1 Decimal point required in mantissa
主要困难是强制执行小数点分隔符并保留双精度和指数表示法。
(2d).ToString(CultureInfo.InvariantCulture)
// returns "2"
// needed "2."
(2E+20d).ToString(CultureInfo.InvariantCulture)
// returns "2E+20"
// needed "2.E+20"
(-2E-20d).ToString(CultureInfo.InvariantCulture)
// returns "-2E-20"
// needed "-2.E-20"
// ETC...
我认为Regex是转换ToString(...)表示的更简单方法,但我想直接基于double值(不是表示)实现我自己的格式化函数。
欢迎任何帮助。
在Sinatr评论后编辑:
此外,
由于代表的数字量很大,编码必须尽可能保持最小的表示。