javascript - 当值由javascript设置时,隐藏小数位最多2位,如excel不会在php中删除
问题描述
我正在使用 cakephp 2.5 制作成本核算表,在其中我使用 javascript 函数计算值,该函数以小数位给出值,如果我将值四舍五入,那么确切数量的总数会有所不同,所以我想显示由 javascript 设置的值最多只有 2 个小数,但希望将所有十进制值保存到数据库中,即 MySql ,
<td colspan="2" >
<?php echo $this->Form->input('Particular.particular_value'.$i, array('name'=>'particular_value[]','label'=>false, 'class'=>'form-control', 'type'=>'number','min'=>'0','step'=>'.001','default' => "0",'autocomplete' => 'off','value'=>isset($this->data['Particular'][$index]['particular_bare_pipe_rate_per_mt_value'])?$this->data['Particular'][$index]['particular_bare_pipe_rate_per_mt_value'] :'0')); ?>
</td>
和
$('#CostValue').val(precisionRound(pbcrv, 0));
function precisionRound(number, precision) {
var factor = Math.pow(10, precision);
return Math.round(number * factor) / factor;
}
当我输入值然后它通过预定义的公式计算我使用precisionRound函数对它们进行四舍五入,但是当我计算总和时它总是与由excel表格制作的总数不同,我想要类似EXCEL表格编号函数的东西,其中我显示的值最多为小数点后2位在前面显示,但是当我计算或将值保存到数据库时,它应该与所有十进制值一起保存。
蓝色背景输入框是调用 js 函数进行进一步计算的输入框,灰色背景输入框被禁用输入(它们基于第一个输入)是我想显示 2 个小数位值的地方。像那样 -
- 实际值 - 2664.267779
- 在前面显示价值 - 2664
- 保存在数据库中 - 2664.267779
解决方案
出于多种原因,您应该考虑不依赖客户端计算将数据 POST 到服务器然后存储它。更强大的解决方案是将输入 POST 到计算中并在服务器上再次进行计算。
造成这种情况的原因很多,例如
a) 客户端计算中的错误很容易看到 NaN 错误地发布到服务器。
b)如果此计算(例如)计算您订购的 X 件相同类型的商品的总价并显示总价,精明的用户将能够在发布之前编辑输入字段并可能支付较少的金额为他们的货物。
对于那些阅读(b)并认为'不-没有人会那样做'的人,我在野外见过它......
推荐阅读
- java - 我得到了一个可选对象,可能是null,那我们如何使用或判断呢?
- flutter - 错误:无法将参数类型“Type”分配给参数类型“Widget Function(BuildContext, MenuInfo, Widget?)”
- javascript - 哨兵源图上传问题 | 反应 JS
- r - R中相同维度的多个数组的标准偏差(和百分位数)
- javascript - 为什么在 Django 中更新我的 HTML 之前必须重新加载两次?
- flutter - 如何处理提供程序并重新创建一个新的提供程序 - Flutter 提供程序包
- gitlab - 可以使用带有 GitLab 的 CI_JOB_TOKEN 推送到 repo 并创建标签吗?
- laravel - laravel 辛烷值 $request-> 合并请求返回 null
- django - Django 为位于“my_app/templates/my_app”子文件夹中的模板抛出 TemplateDoesNotExist
- swagger - AutoRest 错误:(检测到重复操作(这很可能是由于使用相同的 'operationId' 或 'tags' 的 2 个操作)