我有一个字符串"999999999999.999"
。我想将其转换为double
。我尝试了很多东西,但它总是给我错误的数字。
我试过了:
Math.Truncate(Convert.ToDouble("999999999999.999") * 1000) / 1000;
它返回给我:99999999999.99902
只有Convert.ToDouble("999999999999.999")
给我的回报一样。
02
部分是错误的部分。
如何在不损失精度或准确度的情况下将字符串"999999999999.999"
转换为double
?
答案 0 :(得分:3)
如果您想要精确的精度将其转换为十进制
转换为double时会出现精度损失
答案 1 :(得分:0)
如果附加信息表明小数点前不超过12位且后面有3位数,则double应足够精确,以区分所有可存储的数字。
例如,最大数字由999999999999.9990234375表示,它接近999999999999.999而不是任何其他三位小数。
您需要控制格式,以便舍入到最接近的3位小数。
如果进行任何计算,则应转换为十进制,四舍五入到小数点后3位,以避免累积舍入误差。
答案 2 :(得分:-1)
尝试:
double aux = double.Parse("999999999999.999") * 1000 / 1000;
double result = Math.Round(aux, 3);