【问题标题】:How to convert a very large decimal number to a string?如何将非常大的十进制数转换为字符串?
【发布时间】:2020-01-18 09:24:59
【问题描述】:

我想将十进制数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"

【问题讨论】:

    标签: javascript string numbers decimal


    【解决方案1】:

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

    var e = 123.456e+304;
    

    并由 JavaScript 解释器处理,e 只是一个由 IEEE 754 内部表示的数字,一个相当于 1.23456e+306 的数字,它在小数点所在的位置“没有记忆”。所以无论你做什么,你都不知道小数点在哪里,让你把它移动到你希望它在字符串中的位置。

    为了“知道”小数点的位置,您需要有一个字符串开头,但这也是您想要的结果。

    【讨论】:

    • 需要注意的是,IEEE 754格式是二进制,不是十进制,浮点格式;它甚至没有小数点的概念。如果它是 十进制 浮点格式(例如,IEEE 854r 的 decimal64decimal128),那么它可能能够无损失地表示一些十进制值,例如 123.456e+304。跨度>
    • 我的第一个想法是:获取输出字符串6的最后一个字符,然后用小数点移动数减去它并更新一个新字符串,但仍然卡在小数点上。既然您已经注意到You can't know where the decimal point was,所以我认为我的想法无法完成。非常感谢!
    • @Tân 是的...除非您知道整数部分始终为 3 位,或者小数部分始终为 3 位,等等...在这种情况下,您可以使用 123.456.toString().match(/(\d)/g) 之类的东西来做一些处理
    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2016-02-02
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多