如何将一个非常大的十进制数转换为字符串?

3
我想把十进制数123.456e+304转换成字符串"123.456e+304"(小数点.的位置不应该改变)。
这是我尝试过的方法,但它们都返回相同的结果:1.23456e+306(小数点的位置已经改变,并且也将304替换为306)。

var e = 123.456e+304;

console.log(e.toString());
console.log((e).toString());
console.log(e .toString());
console.log(e.toFixed());
console.log(String(e));
console.log((new String(e)).toString());
console.log(`${e}`);
console.log('' + e);
console.log(e + '');
console.log(''.split.call(e, '').join(''));

有没有办法将它转换为期望的字符串 "123.456e+304"
1个回答

4

这是不可能的,因为一旦你分配了:

var e = 123.456e+304;

在JavaScript解释器中处理时,e只是一个内部由IEEE 754表示的数字,相当于1.23456e+306,它没有记忆你的小数点所在的位置。因此,无论你做什么,都无法知道小数点在哪里,并将其移到你想要的字符串中的位置。

为了“了解”小数点的位置,你需要首先有一个字符串,但这也是你想要的结果。


2
需要注意的是,IEEE 754格式是一种二进制浮点格式,而不是十进制浮点格式;它甚至没有十进制小数点的概念。如果它是一个十进制浮点格式(例如,IEEE 854r的“decimal64”或“decimal128”),那么它可能能够表示一些十进制值,如123.456e+304,而不会有损失。 - Peter O.
我的第一个想法是:获取输出字符串“6”的最后一个字符,然后减去小数点移动的数字并更新一个新字符串,但仍然卡在小数点上。由于您已经指出“您无法知道小数点在哪里”,所以我认为我的想法无法实现。非常感谢! - Tân
1
@Tân 是的... 除非你知道整数部分总是3位数字,或者小数部分总是3位数字等等... 在这种情况下,您可以使用类似于 123.456.toString().match(/(\d)/g) 的东西来进行一些处理。 - nonopolarity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接