function format_amount_with_no_e($amount) {
$amount = (string)$amount; // cast the number in string
$pos = stripos($amount, 'E-'); // get the E- position
$there_is_e = $pos !== false; // E- is found
if ($there_is_e) {
$decimals = intval(substr($amount, $pos + 2, strlen($amount))); // extract the decimals
$amount = number_format($amount, $decimals, '.', ','); // format the number without E-
}
return $amount;
}
8条答案
按热度按时间cygmwpex1#
使用number_format()来获得你想要的:
同时检查sprintf()
bpzcxfmw2#
2.1E-5 * 是 * 与0.000021相同的数字。这就是它如何打印小于0.001的数字。如果您希望使用特定格式,请使用printf()。
编辑如果你不熟悉
2.1E-5
语法,你应该知道它是2.1×10-5的简写。这是大多数编程语言在科学记数法中表示数字的方式。nsc4cvqm3#
如果希望看到预期的数字,请使用number_format或sprintf。
ie3xauqp4#
要显示一个最多8个小数位的数字,而不需要在右边添加额外的零(就像number_format一样,这可能会很烦人),请使用以下命令:
x8diyxa75#
一般来说,数字是一个数字,而不是一个字符串,这意味着任何编程语言都将数字视为数字。因此,数字本身并不意味着任何特定的格式(例如使用
.000021
而不是2.1e-5
)。这与显示带有前导零的数字(如0.000021
)或对齐数字列表没有什么不同。这是你在任何编程语言中都会发现的一个普遍问题:如果你想要一个特定的格式,你需要使用你的编程语言的格式函数来指定它。当然,除非您将数字指定为字符串,并在需要时将其转换为真实的。有些语言可以隐式地做到这一点。
cidc1ykv6#
前面的答案回答了OP问题,但没有一个提供代码。
使用此函数将任何数字格式化为**E-**格式。
请注意,函数将始终返回一个字符串。
nbysray57#
编程语言有不同的方法在内存中存储数字。这取决于正在使用的号码类型。在你的例子中,你有一个浮点数(一个分数),它太大了,不能存储为一个定点数(分数是根据它们的大小以这种方式存储的)。
这是一个非常重要的特征,尤其是在处理非常大或非常小的数字时。例如,NASA或SpaceX使用特殊的存储方法进行计算,以确保重返地球轨道的火箭降落在应该降落的地方。
此外,不同的存储方法占用不同的内存量。但是,上面提供的解决方案应该可以工作。请记住,舍入错误可能会发生在非常大或非常小的数字上。
m4pnthwp8#
我创建了一个类似下面的函数,它似乎工作正常。
此函数可以将指数值转换为整数(十进制表示法)。
上面的代码给出了0.000000620503的结果。
我不知道这是否是正确的解决方案;但是,它工作正常。